From 8285d43fd4ac4befab271f4b9cdc59b153b60588 Mon Sep 17 00:00:00 2001 From: jukie <10012479+jukie@users.noreply.github.com> Date: Wed, 22 Jul 2026 13:43:47 -0600 Subject: [PATCH] Update benchmark dashboard for v1.8.3 Signed-off-by: jukie <10012479+jukie@users.noreply.github.com> --- site/static/js/benchmark-dashboard.js | 236 ++-- .../benchmark-dashboard/src/data/index.ts | 3 + .../src/data/versions/v1.8.3.ts | 1215 +++++++++++++++++ 3 files changed, 1336 insertions(+), 118 deletions(-) create mode 100644 site/tools/benchmark-dashboard/src/data/versions/v1.8.3.ts diff --git a/site/static/js/benchmark-dashboard.js b/site/static/js/benchmark-dashboard.js index 7d524df3cd..c53cc162eb 100644 --- a/site/static/js/benchmark-dashboard.js +++ b/site/static/js/benchmark-dashboard.js @@ -1,4 +1,4 @@ -var LP=Object.defineProperty;var _5=e=>{throw TypeError(e)};var HP=(e,t,n)=>t in e?LP(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var x5=(e,t,n)=>HP(e,typeof t!="symbol"?t+"":t,n),Y1=(e,t,n)=>t.has(e)||_5("Cannot "+n);var G=(e,t,n)=>(Y1(e,t,"read from private field"),n?n.call(e):t.get(e)),me=(e,t,n)=>t.has(e)?_5("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),te=(e,t,n,r)=>(Y1(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n),ft=(e,t,n)=>(Y1(e,t,"access private method"),n);var Bl=(e,t,n,r)=>({set _(a){te(e,t,a,n)},get _(){return G(e,t,r)}});function GP(e,t){for(var n=0;nr[a]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}var Fl=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Ae(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var h7={exports:{}},E0={},y7={exports:{}},ce={};/** +var mT=Object.defineProperty;var e7=e=>{throw TypeError(e)};var dT=(e,t,n)=>t in e?mT(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var t7=(e,t,n)=>dT(e,typeof t!="symbol"?t+"":t,n),Nd=(e,t,n)=>t.has(e)||e7("Cannot "+n);var ne=(e,t,n)=>(Nd(e,t,"read from private field"),n?n.call(e):t.get(e)),De=(e,t,n)=>t.has(e)?e7("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),Ee=(e,t,n,r)=>(Nd(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n),zt=(e,t,n)=>(Nd(e,t,"access private method"),n);var mp=(e,t,n,r)=>({set _(a){Ee(e,t,a,n)},get _(){return ne(e,t,r)}});function fT(e,t){for(var n=0;nr[a]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}var dp=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function tt(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var qd={exports:{}},Iu={},jd={exports:{}},Me={};/** * @license React * react.production.min.js * @@ -6,7 +6,7 @@ var LP=Object.defineProperty;var _5=e=>{throw TypeError(e)};var HP=(e,t,n)=>t in * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var kl=Symbol.for("react.element"),BP=Symbol.for("react.portal"),FP=Symbol.for("react.fragment"),zP=Symbol.for("react.strict_mode"),UP=Symbol.for("react.profiler"),WP=Symbol.for("react.provider"),VP=Symbol.for("react.context"),KP=Symbol.for("react.forward_ref"),XP=Symbol.for("react.suspense"),YP=Symbol.for("react.memo"),QP=Symbol.for("react.lazy"),w5=Symbol.iterator;function ZP(e){return e===null||typeof e!="object"?null:(e=w5&&e[w5]||e["@@iterator"],typeof e=="function"?e:null)}var g7={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},_7=Object.assign,x7={};function cs(e,t,n){this.props=e,this.context=t,this.refs=x7,this.updater=n||g7}cs.prototype.isReactComponent={};cs.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};cs.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function w7(){}w7.prototype=cs.prototype;function Yf(e,t,n){this.props=e,this.context=t,this.refs=x7,this.updater=n||g7}var Qf=Yf.prototype=new w7;Qf.constructor=Yf;_7(Qf,cs.prototype);Qf.isPureReactComponent=!0;var b5=Array.isArray,b7=Object.prototype.hasOwnProperty,Zf={current:null},S7={key:!0,ref:!0,__self:!0,__source:!0};function P7(e,t,n){var r,a={},o=null,i=null;if(t!=null)for(r in t.ref!==void 0&&(i=t.ref),t.key!==void 0&&(o=""+t.key),t)b7.call(t,r)&&!S7.hasOwnProperty(r)&&(a[r]=t[r]);var s=arguments.length-2;if(s===1)a.children=n;else if(1{throw TypeError(e)};var HP=(e,t,n)=>t in * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var rO=P,aO=Symbol.for("react.element"),oO=Symbol.for("react.fragment"),iO=Object.prototype.hasOwnProperty,sO=rO.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,uO={key:!0,ref:!0,__self:!0,__source:!0};function k7(e,t,n){var r,a={},o=null,i=null;n!==void 0&&(o=""+n),t.key!==void 0&&(o=""+t.key),t.ref!==void 0&&(i=t.ref);for(r in t)iO.call(t,r)&&!uO.hasOwnProperty(r)&&(a[r]=t[r]);if(e&&e.defaultProps)for(r in t=e.defaultProps,t)a[r]===void 0&&(a[r]=t[r]);return{$$typeof:aO,type:e,key:o,ref:i,props:a,_owner:sO.current}}E0.Fragment=oO;E0.jsx=k7;E0.jsxs=k7;h7.exports=E0;var b=h7.exports,Uc={},C7={exports:{}},sn={},A7={exports:{}},E7={};/** + */var a7;function hT(){if(a7)return Iu;a7=1;var e=Iv(),t=Symbol.for("react.element"),n=Symbol.for("react.fragment"),r=Object.prototype.hasOwnProperty,a=e.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,i={key:!0,ref:!0,__self:!0,__source:!0};function u(l,c,m){var f,d={},v=null,_=null;m!==void 0&&(v=""+m),c.key!==void 0&&(v=""+c.key),c.ref!==void 0&&(_=c.ref);for(f in c)r.call(c,f)&&!i.hasOwnProperty(f)&&(d[f]=c[f]);if(l&&l.defaultProps)for(f in c=l.defaultProps,c)d[f]===void 0&&(d[f]=c[f]);return{$$typeof:t,type:l,key:v,ref:_,props:d,_owner:a.current}}return Iu.Fragment=n,Iu.jsx=u,Iu.jsxs=u,Iu}var o7;function yT(){return o7||(o7=1,qd.exports=hT()),qd.exports}var E=yT(),R=Iv();const L=tt(R),js=fT({__proto__:null,default:L},[R]);var fp={},Md={exports:{}},_n={},Id={exports:{}},Dd={};/** * @license React * scheduler.production.min.js * @@ -22,7 +22,7 @@ var LP=Object.defineProperty;var _5=e=>{throw TypeError(e)};var HP=(e,t,n)=>t in * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */(function(e){function t(j,I){var B=j.length;j.push(I);e:for(;0>>1,F=j[U];if(0>>1;Ua(he,B))bea(J,he)?(j[U]=J,j[be]=B,U=be):(j[U]=he,j[ie]=B,U=ie);else if(bea(J,B))j[U]=J,j[be]=B,U=be;else break e}}return I}function a(j,I){var B=j.sortIndex-I.sortIndex;return B!==0?B:j.id-I.id}if(typeof performance=="object"&&typeof performance.now=="function"){var o=performance;e.unstable_now=function(){return o.now()}}else{var i=Date,s=i.now();e.unstable_now=function(){return i.now()-s}}var u=[],l=[],p=1,c=null,m=3,d=!1,g=!1,f=!1,y=typeof setTimeout=="function"?setTimeout:null,v=typeof clearTimeout=="function"?clearTimeout:null,h=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function _(j){for(var I=n(l);I!==null;){if(I.callback===null)r(l);else if(I.startTime<=j)r(l),I.sortIndex=I.expirationTime,t(u,I);else break;I=n(l)}}function w(j){if(f=!1,_(j),!g)if(n(u)!==null)g=!0,M(x);else{var I=n(l);I!==null&&D(w,I.startTime-j)}}function x(j,I){g=!1,f&&(f=!1,v(k),k=-1),d=!0;var B=m;try{for(_(I),c=n(u);c!==null&&(!(c.expirationTime>I)||j&&!T());){var U=c.callback;if(typeof U=="function"){c.callback=null,m=c.priorityLevel;var F=U(c.expirationTime<=I);I=e.unstable_now(),typeof F=="function"?c.callback=F:c===n(u)&&r(u),_(I)}else r(u);c=n(u)}if(c!==null)var Z=!0;else{var ie=n(l);ie!==null&&D(w,ie.startTime-I),Z=!1}return Z}finally{c=null,m=B,d=!1}}var S=!1,O=null,k=-1,C=5,N=-1;function T(){return!(e.unstable_now()-Nj||125U?(j.sortIndex=B,t(l,j),n(u)===null&&j===n(l)&&(f?(v(k),k=-1):f=!0,D(w,B-U))):(j.sortIndex=F,t(u,j),g||d||(g=!0,M(x))),j},e.unstable_shouldYield=T,e.unstable_wrapCallback=function(j){var I=m;return function(){var B=m;m=I;try{return j.apply(this,arguments)}finally{m=B}}}})(E7);A7.exports=E7;var lO=A7.exports;/** + */var i7;function _T(){return i7||(i7=1,(function(e){function t(z,Y){var Q=z.length;z.push(Y);e:for(;0>>1,W=z[D];if(0>>1;Da(ge,Q))Sea(qe,ge)?(z[D]=qe,z[Se]=Q,D=Se):(z[D]=ge,z[me]=Q,D=me);else if(Sea(qe,Q))z[D]=qe,z[Se]=Q,D=Se;else break e}}return Y}function a(z,Y){var Q=z.sortIndex-Y.sortIndex;return Q!==0?Q:z.id-Y.id}if(typeof performance=="object"&&typeof performance.now=="function"){var i=performance;e.unstable_now=function(){return i.now()}}else{var u=Date,l=u.now();e.unstable_now=function(){return u.now()-l}}var c=[],m=[],f=1,d=null,v=3,_=!1,w=!1,g=!1,y=typeof setTimeout=="function"?setTimeout:null,b=typeof clearTimeout=="function"?clearTimeout:null,O=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function C(z){for(var Y=n(m);Y!==null;){if(Y.callback===null)r(m);else if(Y.startTime<=z)r(m),Y.sortIndex=Y.expirationTime,t(c,Y);else break;Y=n(m)}}function k(z){if(g=!1,C(z),!w)if(n(c)!==null)w=!0,K(P);else{var Y=n(m);Y!==null&&J(k,Y.startTime-z)}}function P(z,Y){w=!1,g&&(g=!1,b(q),q=-1),_=!0;var Q=v;try{for(C(Y),d=n(c);d!==null&&(!(d.expirationTime>Y)||z&&!$());){var D=d.callback;if(typeof D=="function"){d.callback=null,v=d.priorityLevel;var W=D(d.expirationTime<=Y);Y=e.unstable_now(),typeof W=="function"?d.callback=W:d===n(c)&&r(c),C(Y)}else r(c);d=n(c)}if(d!==null)var oe=!0;else{var me=n(m);me!==null&&J(k,me.startTime-Y),oe=!1}return oe}finally{d=null,v=Q,_=!1}}var A=!1,T=null,q=-1,j=5,B=-1;function $(){return!(e.unstable_now()-Bz||125D?(z.sortIndex=Q,t(m,z),n(c)===null&&z===n(m)&&(g?(b(q),q=-1):g=!0,J(k,Q-D))):(z.sortIndex=W,t(c,z),w||_||(w=!0,K(P))),z},e.unstable_shouldYield=$,e.unstable_wrapCallback=function(z){var Y=v;return function(){var Q=v;v=Y;try{return z.apply(this,arguments)}finally{v=Q}}}})(Dd)),Dd}var s7;function gT(){return s7||(s7=1,Id.exports=_T()),Id.exports}/** * @license React * react-dom.production.min.js * @@ -30,184 +30,184 @@ var LP=Object.defineProperty;var _5=e=>{throw TypeError(e)};var HP=(e,t,n)=>t in * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. - */var cO=P,on=lO;function z(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),cd=Object.prototype.hasOwnProperty,pO=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,P5={},O5={};function mO(e){return cd.call(O5,e)?!0:cd.call(P5,e)?!1:pO.test(e)?O5[e]=!0:(P5[e]=!0,!1)}function dO(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function fO(e,t,n,r){if(t===null||typeof t>"u"||dO(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function Dt(e,t,n,r,a,o,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=a,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var wt={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){wt[e]=new Dt(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];wt[t]=new Dt(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){wt[e]=new Dt(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){wt[e]=new Dt(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){wt[e]=new Dt(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){wt[e]=new Dt(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){wt[e]=new Dt(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){wt[e]=new Dt(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){wt[e]=new Dt(e,5,!1,e.toLowerCase(),null,!1,!1)});var t4=/[\-:]([a-z])/g;function n4(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(t4,n4);wt[t]=new Dt(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(t4,n4);wt[t]=new Dt(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(t4,n4);wt[t]=new Dt(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){wt[e]=new Dt(e,1,!1,e.toLowerCase(),null,!1,!1)});wt.xlinkHref=new Dt("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){wt[e]=new Dt(e,1,!1,e.toLowerCase(),null,!0,!0)});function r4(e,t,n,r){var a=wt.hasOwnProperty(t)?wt[t]:null;(a!==null?a.type!==0:r||!(2s||a[i]!==o[s]){var u=` -`+a[i].replace(" at new "," at ");return e.displayName&&u.includes("")&&(u=u.replace("",e.displayName)),u}while(1<=i&&0<=s);break}}}finally{J1=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Js(e):""}function vO(e){switch(e.tag){case 5:return Js(e.type);case 16:return Js("Lazy");case 13:return Js("Suspense");case 19:return Js("SuspenseList");case 0:case 2:case 15:return e=em(e.type,!1),e;case 11:return e=em(e.type.render,!1),e;case 1:return e=em(e.type,!0),e;default:return""}}function fd(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case Vo:return"Fragment";case Wo:return"Portal";case pd:return"Profiler";case a4:return"StrictMode";case md:return"Suspense";case dd:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case j7:return(e.displayName||"Context")+".Consumer";case T7:return(e._context.displayName||"Context")+".Provider";case o4:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case i4:return t=e.displayName||null,t!==null?t:fd(e.type)||"Memo";case ea:t=e._payload,e=e._init;try{return fd(e(t))}catch{}}return null}function hO(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return fd(t);case 8:return t===a4?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function ka(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function $7(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function yO(e){var t=$7(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var a=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return a.call(this)},set:function(i){r=""+i,o.call(this,i)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(i){r=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function Wl(e){e._valueTracker||(e._valueTracker=yO(e))}function M7(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=$7(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function Wc(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function vd(e,t){var n=t.checked;return ze({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function C5(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=ka(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function q7(e,t){t=t.checked,t!=null&&r4(e,"checked",t,!1)}function hd(e,t){q7(e,t);var n=ka(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?yd(e,t.type,n):t.hasOwnProperty("defaultValue")&&yd(e,t.type,ka(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function A5(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function yd(e,t,n){(t!=="number"||Wc(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var eu=Array.isArray;function si(e,t,n,r){if(e=e.options,t){t={};for(var a=0;a"+t.valueOf().toString()+"",t=Vl.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function bu(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var ou={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},gO=["Webkit","ms","Moz","O"];Object.keys(ou).forEach(function(e){gO.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ou[t]=ou[e]})});function H7(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||ou.hasOwnProperty(e)&&ou[e]?(""+t).trim():t+"px"}function G7(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,a=H7(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,a):e[n]=a}}var _O=ze({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function xd(e,t){if(t){if(_O[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(z(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(z(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(z(61))}if(t.style!=null&&typeof t.style!="object")throw Error(z(62))}}function wd(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var bd=null;function s4(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Sd=null,ui=null,li=null;function T5(e){if(e=El(e)){if(typeof Sd!="function")throw Error(z(280));var t=e.stateNode;t&&(t=$0(t),Sd(e.stateNode,e.type,t))}}function B7(e){ui?li?li.push(e):li=[e]:ui=e}function F7(){if(ui){var e=ui,t=li;if(li=ui=null,T5(e),t)for(e=0;e>>=0,e===0?32:31-(NO(e)/TO|0)|0}var Kl=64,Xl=4194304;function tu(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function Yc(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,a=e.suspendedLanes,o=e.pingedLanes,i=n&268435455;if(i!==0){var s=i&~a;s!==0?r=tu(s):(o&=i,o!==0&&(r=tu(o)))}else i=n&~a,i!==0?r=tu(i):o!==0&&(r=tu(o));if(r===0)return 0;if(t!==0&&t!==r&&!(t&a)&&(a=r&-r,o=t&-t,a>=o||a===16&&(o&4194240)!==0))return t;if(r&4&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function Cl(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Bn(t),e[t]=n}function MO(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=su),H5=" ",G5=!1;function lg(e,t){switch(e){case"keyup":return lk.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function cg(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var Ko=!1;function pk(e,t){switch(e){case"compositionend":return cg(t);case"keypress":return t.which!==32?null:(G5=!0,H5);case"textInput":return e=t.data,e===H5&&G5?null:e;default:return null}}function mk(e,t){if(Ko)return e==="compositionend"||!v4&&lg(e,t)?(e=sg(),Tc=m4=ma=null,Ko=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=U5(n)}}function fg(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?fg(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function vg(){for(var e=window,t=Wc();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=Wc(e.document)}return t}function h4(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function wk(e){var t=vg(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&fg(n.ownerDocument.documentElement,n)){if(r!==null&&h4(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var a=n.textContent.length,o=Math.min(r.start,a);r=r.end===void 0?o:Math.min(r.end,a),!e.extend&&o>r&&(a=r,r=o,o=a),a=W5(n,o);var i=W5(n,r);a&&i&&(e.rangeCount!==1||e.anchorNode!==a.node||e.anchorOffset!==a.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(a.node,a.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,Xo=null,Ed=null,lu=null,Nd=!1;function V5(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Nd||Xo==null||Xo!==Wc(r)||(r=Xo,"selectionStart"in r&&h4(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),lu&&Au(lu,r)||(lu=r,r=Jc(Ed,"onSelect"),0Zo||(e.current=qd[Zo],qd[Zo]=null,Zo--)}function je(e,t){Zo++,qd[Zo]=e.current,e.current=t}var Ca={},Tt=ja(Ca),Ft=ja(!1),yo=Ca;function Ni(e,t){var n=e.type.contextTypes;if(!n)return Ca;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var a={},o;for(o in n)a[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function zt(e){return e=e.childContextTypes,e!=null}function tp(){Le(Ft),Le(Tt)}function ev(e,t,n){if(Tt.current!==Ca)throw Error(z(168));je(Tt,t),je(Ft,n)}function Pg(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var a in r)if(!(a in t))throw Error(z(108,hO(e)||"Unknown",a));return ze({},n,r)}function np(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Ca,yo=Tt.current,je(Tt,e),je(Ft,Ft.current),!0}function tv(e,t,n){var r=e.stateNode;if(!r)throw Error(z(169));n?(e=Pg(e,t,yo),r.__reactInternalMemoizedMergedChildContext=e,Le(Ft),Le(Tt),je(Tt,e)):Le(Ft),je(Ft,n)}var br=null,M0=!1,fm=!1;function Og(e){br===null?br=[e]:br.push(e)}function Rk(e){M0=!0,Og(e)}function Ra(){if(!fm&&br!==null){fm=!0;var e=0,t=Oe;try{var n=br;for(Oe=1;e>=i,a-=i,Pr=1<<32-Bn(t)+a|n<k?(C=O,O=null):C=O.sibling;var N=m(v,O,_[k],w);if(N===null){O===null&&(O=C);break}e&&O&&N.alternate===null&&t(v,O),h=o(N,h,k),S===null?x=N:S.sibling=N,S=N,O=C}if(k===_.length)return n(v,O),He&&Wa(v,k),x;if(O===null){for(;k<_.length;k++)O=c(v,_[k],w),O!==null&&(h=o(O,h,k),S===null?x=O:S.sibling=O,S=O);return He&&Wa(v,k),x}for(O=r(v,O);k<_.length;k++)C=d(O,v,k,_[k],w),C!==null&&(e&&C.alternate!==null&&O.delete(C.key===null?k:C.key),h=o(C,h,k),S===null?x=C:S.sibling=C,S=C);return e&&O.forEach(function(T){return t(v,T)}),He&&Wa(v,k),x}function f(v,h,_,w){var x=Rs(_);if(typeof x!="function")throw Error(z(150));if(_=x.call(_),_==null)throw Error(z(151));for(var S=x=null,O=h,k=h=0,C=null,N=_.next();O!==null&&!N.done;k++,N=_.next()){O.index>k?(C=O,O=null):C=O.sibling;var T=m(v,O,N.value,w);if(T===null){O===null&&(O=C);break}e&&O&&T.alternate===null&&t(v,O),h=o(T,h,k),S===null?x=T:S.sibling=T,S=T,O=C}if(N.done)return n(v,O),He&&Wa(v,k),x;if(O===null){for(;!N.done;k++,N=_.next())N=c(v,N.value,w),N!==null&&(h=o(N,h,k),S===null?x=N:S.sibling=N,S=N);return He&&Wa(v,k),x}for(O=r(v,O);!N.done;k++,N=_.next())N=d(O,v,k,N.value,w),N!==null&&(e&&N.alternate!==null&&O.delete(N.key===null?k:N.key),h=o(N,h,k),S===null?x=N:S.sibling=N,S=N);return e&&O.forEach(function(A){return t(v,A)}),He&&Wa(v,k),x}function y(v,h,_,w){if(typeof _=="object"&&_!==null&&_.type===Vo&&_.key===null&&(_=_.props.children),typeof _=="object"&&_!==null){switch(_.$$typeof){case Ul:e:{for(var x=_.key,S=h;S!==null;){if(S.key===x){if(x=_.type,x===Vo){if(S.tag===7){n(v,S.sibling),h=a(S,_.props.children),h.return=v,v=h;break e}}else if(S.elementType===x||typeof x=="object"&&x!==null&&x.$$typeof===ea&&av(x)===S.type){n(v,S.sibling),h=a(S,_.props),h.ref=Ds(v,S,_),h.return=v,v=h;break e}n(v,S);break}else t(v,S);S=S.sibling}_.type===Vo?(h=mo(_.props.children,v.mode,w,_.key),h.return=v,v=h):(w=Lc(_.type,_.key,_.props,null,v.mode,w),w.ref=Ds(v,h,_),w.return=v,v=w)}return i(v);case Wo:e:{for(S=_.key;h!==null;){if(h.key===S)if(h.tag===4&&h.stateNode.containerInfo===_.containerInfo&&h.stateNode.implementation===_.implementation){n(v,h.sibling),h=a(h,_.children||[]),h.return=v,v=h;break e}else{n(v,h);break}else t(v,h);h=h.sibling}h=bm(_,v.mode,w),h.return=v,v=h}return i(v);case ea:return S=_._init,y(v,h,S(_._payload),w)}if(eu(_))return g(v,h,_,w);if(Rs(_))return f(v,h,_,w);nc(v,_)}return typeof _=="string"&&_!==""||typeof _=="number"?(_=""+_,h!==null&&h.tag===6?(n(v,h.sibling),h=a(h,_),h.return=v,v=h):(n(v,h),h=wm(_,v.mode,w),h.return=v,v=h),i(v)):n(v,h)}return y}var ji=Eg(!0),Ng=Eg(!1),op=ja(null),ip=null,ti=null,x4=null;function w4(){x4=ti=ip=null}function b4(e){var t=op.current;Le(op),e._currentValue=t}function Ld(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function pi(e,t){ip=e,x4=ti=null,e=e.dependencies,e!==null&&e.firstContext!==null&&(e.lanes&t&&(Ht=!0),e.firstContext=null)}function xn(e){var t=e._currentValue;if(x4!==e)if(e={context:e,memoizedValue:t,next:null},ti===null){if(ip===null)throw Error(z(308));ti=e,ip.dependencies={lanes:0,firstContext:e}}else ti=ti.next=e;return t}var Za=null;function S4(e){Za===null?Za=[e]:Za.push(e)}function Tg(e,t,n,r){var a=t.interleaved;return a===null?(n.next=n,S4(t)):(n.next=a.next,a.next=n),t.interleaved=n,Mr(e,r)}function Mr(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var ta=!1;function P4(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function jg(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function Er(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function wa(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,fe&2){var a=r.pending;return a===null?t.next=t:(t.next=a.next,a.next=t),r.pending=t,Mr(e,n)}return a=r.interleaved,a===null?(t.next=t,S4(r)):(t.next=a.next,a.next=t),r.interleaved=t,Mr(e,n)}function Rc(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,l4(e,n)}}function ov(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var a=null,o=null;if(n=n.firstBaseUpdate,n!==null){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};o===null?a=o=i:o=o.next=i,n=n.next}while(n!==null);o===null?a=o=t:o=o.next=t}else a=o=t;n={baseState:r.baseState,firstBaseUpdate:a,lastBaseUpdate:o,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function sp(e,t,n,r){var a=e.updateQueue;ta=!1;var o=a.firstBaseUpdate,i=a.lastBaseUpdate,s=a.shared.pending;if(s!==null){a.shared.pending=null;var u=s,l=u.next;u.next=null,i===null?o=l:i.next=l,i=u;var p=e.alternate;p!==null&&(p=p.updateQueue,s=p.lastBaseUpdate,s!==i&&(s===null?p.firstBaseUpdate=l:s.next=l,p.lastBaseUpdate=u))}if(o!==null){var c=a.baseState;i=0,p=l=u=null,s=o;do{var m=s.lane,d=s.eventTime;if((r&m)===m){p!==null&&(p=p.next={eventTime:d,lane:0,tag:s.tag,payload:s.payload,callback:s.callback,next:null});e:{var g=e,f=s;switch(m=t,d=n,f.tag){case 1:if(g=f.payload,typeof g=="function"){c=g.call(d,c,m);break e}c=g;break e;case 3:g.flags=g.flags&-65537|128;case 0:if(g=f.payload,m=typeof g=="function"?g.call(d,c,m):g,m==null)break e;c=ze({},c,m);break e;case 2:ta=!0}}s.callback!==null&&s.lane!==0&&(e.flags|=64,m=a.effects,m===null?a.effects=[s]:m.push(s))}else d={eventTime:d,lane:m,tag:s.tag,payload:s.payload,callback:s.callback,next:null},p===null?(l=p=d,u=c):p=p.next=d,i|=m;if(s=s.next,s===null){if(s=a.shared.pending,s===null)break;m=s,s=m.next,m.next=null,a.lastBaseUpdate=m,a.shared.pending=null}}while(!0);if(p===null&&(u=c),a.baseState=u,a.firstBaseUpdate=l,a.lastBaseUpdate=p,t=a.shared.interleaved,t!==null){a=t;do i|=a.lane,a=a.next;while(a!==t)}else o===null&&(a.shared.lanes=0);xo|=i,e.lanes=i,e.memoizedState=c}}function iv(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=hm.transition;hm.transition={};try{e(!1),t()}finally{Oe=n,hm.transition=r}}function Xg(){return wn().memoizedState}function Ik(e,t,n){var r=Sa(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},Yg(e))Qg(t,n);else if(n=Tg(e,t,n,r),n!==null){var a=qt();Fn(n,e,r,a),Zg(n,t,r)}}function Dk(e,t,n){var r=Sa(e),a={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(Yg(e))Qg(t,a);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var i=t.lastRenderedState,s=o(i,n);if(a.hasEagerState=!0,a.eagerState=s,zn(s,i)){var u=t.interleaved;u===null?(a.next=a,S4(t)):(a.next=u.next,u.next=a),t.interleaved=a;return}}catch{}finally{}n=Tg(e,t,a,r),n!==null&&(a=qt(),Fn(n,e,r,a),Zg(n,t,r))}}function Yg(e){var t=e.alternate;return e===Fe||t!==null&&t===Fe}function Qg(e,t){cu=lp=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Zg(e,t,n){if(n&4194240){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,l4(e,n)}}var cp={readContext:xn,useCallback:bt,useContext:bt,useEffect:bt,useImperativeHandle:bt,useInsertionEffect:bt,useLayoutEffect:bt,useMemo:bt,useReducer:bt,useRef:bt,useState:bt,useDebugValue:bt,useDeferredValue:bt,useTransition:bt,useMutableSource:bt,useSyncExternalStore:bt,useId:bt,unstable_isNewReconciler:!1},Lk={readContext:xn,useCallback:function(e,t){return Qn().memoizedState=[e,t===void 0?null:t],e},useContext:xn,useEffect:uv,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,Mc(4194308,4,zg.bind(null,t,e),n)},useLayoutEffect:function(e,t){return Mc(4194308,4,e,t)},useInsertionEffect:function(e,t){return Mc(4,2,e,t)},useMemo:function(e,t){var n=Qn();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Qn();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=Ik.bind(null,Fe,e),[r.memoizedState,e]},useRef:function(e){var t=Qn();return e={current:e},t.memoizedState=e},useState:sv,useDebugValue:j4,useDeferredValue:function(e){return Qn().memoizedState=e},useTransition:function(){var e=sv(!1),t=e[0];return e=qk.bind(null,e[1]),Qn().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=Fe,a=Qn();if(He){if(n===void 0)throw Error(z(407));n=n()}else{if(n=t(),mt===null)throw Error(z(349));_o&30||qg(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,uv(Dg.bind(null,r,o,e),[e]),r.flags|=2048,qu(9,Ig.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=Qn(),t=mt.identifierPrefix;if(He){var n=Or,r=Pr;n=(r&~(1<<32-Bn(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=$u++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=i.createElement(n,{is:r.is}):(e=i.createElement(n),n==="select"&&(i=e,r.multiple?i.multiple=!0:r.size&&(i.size=r.size))):e=i.createElementNS(e,n),e[nr]=t,e[Tu]=r,u8(e,t,!1,!1),t.stateNode=e;e:{switch(i=wd(n,r),n){case"dialog":qe("cancel",e),qe("close",e),a=r;break;case"iframe":case"object":case"embed":qe("load",e),a=r;break;case"video":case"audio":for(a=0;aMi&&(t.flags|=128,r=!0,Ls(o,!1),t.lanes=4194304)}else{if(!r)if(e=up(i),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Ls(o,!0),o.tail===null&&o.tailMode==="hidden"&&!i.alternate&&!He)return St(t),null}else 2*Xe()-o.renderingStartTime>Mi&&n!==1073741824&&(t.flags|=128,r=!0,Ls(o,!1),t.lanes=4194304);o.isBackwards?(i.sibling=t.child,t.child=i):(n=o.last,n!==null?n.sibling=i:t.child=i,o.last=i)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=Xe(),t.sibling=null,n=Be.current,je(Be,r?n&1|2:n&1),t):(St(t),null);case 22:case 23:return D4(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&t.mode&1?Yt&1073741824&&(St(t),t.subtreeFlags&6&&(t.flags|=8192)):St(t),null;case 24:return null;case 25:return null}throw Error(z(156,t.tag))}function Vk(e,t){switch(g4(t),t.tag){case 1:return zt(t.type)&&tp(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Ri(),Le(Ft),Le(Tt),C4(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 5:return k4(t),null;case 13:if(Le(Be),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(z(340));Ti()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return Le(Be),null;case 4:return Ri(),null;case 10:return b4(t.type._context),null;case 22:case 23:return D4(),null;case 24:return null;default:return null}}var ac=!1,Ct=!1,Kk=typeof WeakSet=="function"?WeakSet:Set,Y=null;function ni(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){We(e,t,r)}else n.current=null}function Kd(e,t,n){try{n()}catch(r){We(e,t,r)}}var _v=!1;function Xk(e,t){if(Td=Qc,e=vg(),h4(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var a=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var i=0,s=-1,u=-1,l=0,p=0,c=e,m=null;t:for(;;){for(var d;c!==n||a!==0&&c.nodeType!==3||(s=i+a),c!==o||r!==0&&c.nodeType!==3||(u=i+r),c.nodeType===3&&(i+=c.nodeValue.length),(d=c.firstChild)!==null;)m=c,c=d;for(;;){if(c===e)break t;if(m===n&&++l===a&&(s=i),m===o&&++p===r&&(u=i),(d=c.nextSibling)!==null)break;c=m,m=c.parentNode}c=d}n=s===-1||u===-1?null:{start:s,end:u}}else n=null}n=n||{start:0,end:0}}else n=null;for(jd={focusedElem:e,selectionRange:n},Qc=!1,Y=t;Y!==null;)if(t=Y,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,Y=e;else for(;Y!==null;){t=Y;try{var g=t.alternate;if(t.flags&1024)switch(t.tag){case 0:case 11:case 15:break;case 1:if(g!==null){var f=g.memoizedProps,y=g.memoizedState,v=t.stateNode,h=v.getSnapshotBeforeUpdate(t.elementType===t.type?f:En(t.type,f),y);v.__reactInternalSnapshotBeforeUpdate=h}break;case 3:var _=t.stateNode.containerInfo;_.nodeType===1?_.textContent="":_.nodeType===9&&_.documentElement&&_.removeChild(_.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(z(163))}}catch(w){We(t,t.return,w)}if(e=t.sibling,e!==null){e.return=t.return,Y=e;break}Y=t.return}return g=_v,_v=!1,g}function pu(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var a=r=r.next;do{if((a.tag&e)===e){var o=a.destroy;a.destroy=void 0,o!==void 0&&Kd(t,n,o)}a=a.next}while(a!==r)}}function D0(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function Xd(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function p8(e){var t=e.alternate;t!==null&&(e.alternate=null,p8(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[nr],delete t[Tu],delete t[Md],delete t[Tk],delete t[jk])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function m8(e){return e.tag===5||e.tag===3||e.tag===4}function xv(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||m8(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Yd(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=ep));else if(r!==4&&(e=e.child,e!==null))for(Yd(e,t,n),e=e.sibling;e!==null;)Yd(e,t,n),e=e.sibling}function Qd(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(Qd(e,t,n),e=e.sibling;e!==null;)Qd(e,t,n),e=e.sibling}var ht=null,jn=!1;function Kr(e,t,n){for(n=n.child;n!==null;)d8(e,t,n),n=n.sibling}function d8(e,t,n){if(lr&&typeof lr.onCommitFiberUnmount=="function")try{lr.onCommitFiberUnmount(N0,n)}catch{}switch(n.tag){case 5:Ct||ni(n,t);case 6:var r=ht,a=jn;ht=null,Kr(e,t,n),ht=r,jn=a,ht!==null&&(jn?(e=ht,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):ht.removeChild(n.stateNode));break;case 18:ht!==null&&(jn?(e=ht,n=n.stateNode,e.nodeType===8?dm(e.parentNode,n):e.nodeType===1&&dm(e,n),ku(e)):dm(ht,n.stateNode));break;case 4:r=ht,a=jn,ht=n.stateNode.containerInfo,jn=!0,Kr(e,t,n),ht=r,jn=a;break;case 0:case 11:case 14:case 15:if(!Ct&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){a=r=r.next;do{var o=a,i=o.destroy;o=o.tag,i!==void 0&&(o&2||o&4)&&Kd(n,t,i),a=a.next}while(a!==r)}Kr(e,t,n);break;case 1:if(!Ct&&(ni(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(s){We(n,t,s)}Kr(e,t,n);break;case 21:Kr(e,t,n);break;case 22:n.mode&1?(Ct=(r=Ct)||n.memoizedState!==null,Kr(e,t,n),Ct=r):Kr(e,t,n);break;default:Kr(e,t,n)}}function wv(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new Kk),t.forEach(function(r){var a=aC.bind(null,e,r);n.has(r)||(n.add(r),r.then(a,a))})}}function kn(e,t){var n=t.deletions;if(n!==null)for(var r=0;ra&&(a=i),r&=~o}if(r=a,r=Xe()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*Qk(r/1960))-r,10e?16:e,da===null)var r=!1;else{if(e=da,da=null,dp=0,fe&6)throw Error(z(331));var a=fe;for(fe|=4,Y=e.current;Y!==null;){var o=Y,i=o.child;if(Y.flags&16){var s=o.deletions;if(s!==null){for(var u=0;uXe()-q4?po(e,0):M4|=n),Ut(e,t)}function w8(e,t){t===0&&(e.mode&1?(t=Xl,Xl<<=1,!(Xl&130023424)&&(Xl=4194304)):t=1);var n=qt();e=Mr(e,t),e!==null&&(Cl(e,t,n),Ut(e,n))}function rC(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),w8(e,n)}function aC(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(z(314))}r!==null&&r.delete(t),w8(e,n)}var b8;b8=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||Ft.current)Ht=!0;else{if(!(e.lanes&n)&&!(t.flags&128))return Ht=!1,Uk(e,t,n);Ht=!!(e.flags&131072)}else Ht=!1,He&&t.flags&1048576&&kg(t,ap,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;qc(e,t),e=t.pendingProps;var a=Ni(t,Tt.current);pi(t,n),a=E4(null,t,r,e,a,n);var o=N4();return t.flags|=1,typeof a=="object"&&a!==null&&typeof a.render=="function"&&a.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,zt(r)?(o=!0,np(t)):o=!1,t.memoizedState=a.state!==null&&a.state!==void 0?a.state:null,P4(t),a.updater=I0,t.stateNode=a,a._reactInternals=t,Gd(t,r,e,n),t=zd(null,t,r,!0,o,n)):(t.tag=0,He&&o&&y4(t),Rt(null,t,a,n),t=t.child),t;case 16:r=t.elementType;e:{switch(qc(e,t),e=t.pendingProps,a=r._init,r=a(r._payload),t.type=r,a=t.tag=iC(r),e=En(r,e),a){case 0:t=Fd(null,t,r,e,n);break e;case 1:t=hv(null,t,r,e,n);break e;case 11:t=fv(null,t,r,e,n);break e;case 14:t=vv(null,t,r,En(r.type,e),n);break e}throw Error(z(306,r,""))}return t;case 0:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:En(r,a),Fd(e,t,r,a,n);case 1:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:En(r,a),hv(e,t,r,a,n);case 3:e:{if(o8(t),e===null)throw Error(z(387));r=t.pendingProps,o=t.memoizedState,a=o.element,jg(e,t),sp(t,r,null,n);var i=t.memoizedState;if(r=i.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){a=$i(Error(z(423)),t),t=yv(e,t,r,n,a);break e}else if(r!==a){a=$i(Error(z(424)),t),t=yv(e,t,r,n,a);break e}else for(tn=xa(t.stateNode.containerInfo.firstChild),rn=t,He=!0,Mn=null,n=Ng(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(Ti(),r===a){t=qr(e,t,n);break e}Rt(e,t,r,n)}t=t.child}return t;case 5:return Rg(t),e===null&&Dd(t),r=t.type,a=t.pendingProps,o=e!==null?e.memoizedProps:null,i=a.children,Rd(r,a)?i=null:o!==null&&Rd(r,o)&&(t.flags|=32),a8(e,t),Rt(e,t,i,n),t.child;case 6:return e===null&&Dd(t),null;case 13:return i8(e,t,n);case 4:return O4(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=ji(t,null,r,n):Rt(e,t,r,n),t.child;case 11:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:En(r,a),fv(e,t,r,a,n);case 7:return Rt(e,t,t.pendingProps,n),t.child;case 8:return Rt(e,t,t.pendingProps.children,n),t.child;case 12:return Rt(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,a=t.pendingProps,o=t.memoizedProps,i=a.value,je(op,r._currentValue),r._currentValue=i,o!==null)if(zn(o.value,i)){if(o.children===a.children&&!Ft.current){t=qr(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var s=o.dependencies;if(s!==null){i=o.child;for(var u=s.firstContext;u!==null;){if(u.context===r){if(o.tag===1){u=Er(-1,n&-n),u.tag=2;var l=o.updateQueue;if(l!==null){l=l.shared;var p=l.pending;p===null?u.next=u:(u.next=p.next,p.next=u),l.pending=u}}o.lanes|=n,u=o.alternate,u!==null&&(u.lanes|=n),Ld(o.return,n,t),s.lanes|=n;break}u=u.next}}else if(o.tag===10)i=o.type===t.type?null:o.child;else if(o.tag===18){if(i=o.return,i===null)throw Error(z(341));i.lanes|=n,s=i.alternate,s!==null&&(s.lanes|=n),Ld(i,n,t),i=o.sibling}else i=o.child;if(i!==null)i.return=o;else for(i=o;i!==null;){if(i===t){i=null;break}if(o=i.sibling,o!==null){o.return=i.return,i=o;break}i=i.return}o=i}Rt(e,t,a.children,n),t=t.child}return t;case 9:return a=t.type,r=t.pendingProps.children,pi(t,n),a=xn(a),r=r(a),t.flags|=1,Rt(e,t,r,n),t.child;case 14:return r=t.type,a=En(r,t.pendingProps),a=En(r.type,a),vv(e,t,r,a,n);case 15:return n8(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,a=t.pendingProps,a=t.elementType===r?a:En(r,a),qc(e,t),t.tag=1,zt(r)?(e=!0,np(t)):e=!1,pi(t,n),Jg(t,r,a),Gd(t,r,a,n),zd(null,t,r,!0,e,n);case 19:return s8(e,t,n);case 22:return r8(e,t,n)}throw Error(z(156,t.tag))};function S8(e,t){return Y7(e,t)}function oC(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function hn(e,t,n,r){return new oC(e,t,n,r)}function H4(e){return e=e.prototype,!(!e||!e.isReactComponent)}function iC(e){if(typeof e=="function")return H4(e)?1:0;if(e!=null){if(e=e.$$typeof,e===o4)return 11;if(e===i4)return 14}return 2}function Pa(e,t){var n=e.alternate;return n===null?(n=hn(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Lc(e,t,n,r,a,o){var i=2;if(r=e,typeof e=="function")H4(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case Vo:return mo(n.children,a,o,t);case a4:i=8,a|=8;break;case pd:return e=hn(12,n,t,a|2),e.elementType=pd,e.lanes=o,e;case md:return e=hn(13,n,t,a),e.elementType=md,e.lanes=o,e;case dd:return e=hn(19,n,t,a),e.elementType=dd,e.lanes=o,e;case R7:return H0(n,a,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case T7:i=10;break e;case j7:i=9;break e;case o4:i=11;break e;case i4:i=14;break e;case ea:i=16,r=null;break e}throw Error(z(130,e==null?e:typeof e,""))}return t=hn(i,n,t,a),t.elementType=e,t.type=r,t.lanes=o,t}function mo(e,t,n,r){return e=hn(7,e,r,t),e.lanes=n,e}function H0(e,t,n,r){return e=hn(22,e,r,t),e.elementType=R7,e.lanes=n,e.stateNode={isHidden:!1},e}function wm(e,t,n){return e=hn(6,e,null,t),e.lanes=n,e}function bm(e,t,n){return t=hn(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function sC(e,t,n,r,a){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=nm(0),this.expirationTimes=nm(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=nm(0),this.identifierPrefix=r,this.onRecoverableError=a,this.mutableSourceEagerHydrationData=null}function G4(e,t,n,r,a,o,i,s,u){return e=new sC(e,t,n,s,u),t===1?(t=1,o===!0&&(t|=8)):t=0,o=hn(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},P4(o),e}function uC(e,t,n){var r=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(C8)}catch(e){console.error(e)}}C8(),C7.exports=sn;var ds=C7.exports;const dC=Ae(ds);var Ev=ds;Uc.createRoot=Ev.createRoot,Uc.hydrateRoot=Ev.hydrateRoot;function Nv(e,[t,n]){return Math.min(n,Math.max(t,e))}function de(e,t,{checkForDefaultPrevented:n=!0}={}){return function(a){if(e==null||e(a),n===!1||!a.defaultPrevented)return t==null?void 0:t(a)}}function fs(e,t=[]){let n=[];function r(o,i){const s=P.createContext(i),u=n.length;n=[...n,i];const l=c=>{var v;const{scope:m,children:d,...g}=c,f=((v=m==null?void 0:m[e])==null?void 0:v[u])||s,y=P.useMemo(()=>g,Object.values(g));return b.jsx(f.Provider,{value:y,children:d})};l.displayName=o+"Provider";function p(c,m){var f;const d=((f=m==null?void 0:m[e])==null?void 0:f[u])||s,g=P.useContext(d);if(g)return g;if(i!==void 0)return i;throw new Error(`\`${c}\` must be used within \`${o}\``)}return[l,p]}const a=()=>{const o=n.map(i=>P.createContext(i));return function(s){const u=(s==null?void 0:s[e])||o;return P.useMemo(()=>({[`__scope${e}`]:{...s,[e]:u}}),[s,u])}};return a.scopeName=e,[r,fC(a,...t)]}function fC(...e){const t=e[0];if(e.length===1)return t;const n=()=>{const r=e.map(a=>({useScope:a(),scopeName:a.scopeName}));return function(o){const i=r.reduce((s,{useScope:u,scopeName:l})=>{const c=u(o)[`__scope${l}`];return{...s,...c}},{});return P.useMemo(()=>({[`__scope${t.scopeName}`]:i}),[i])}};return n.scopeName=t.scopeName,n}function Tv(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function Tl(...e){return t=>{let n=!1;const r=e.map(a=>{const o=Tv(a,t);return!n&&typeof o=="function"&&(n=!0),o});if(n)return()=>{for(let a=0;a{const{children:o,...i}=r,s=P.Children.toArray(o),u=s.find(yC);if(u){const l=u.props.children,p=s.map(c=>c===u?P.Children.count(l)>1?P.Children.only(null):P.isValidElement(l)?l.props.children:null:c);return b.jsx(t,{...i,ref:a,children:P.isValidElement(l)?P.cloneElement(l,void 0,p):null})}return b.jsx(t,{...i,ref:a,children:o})});return n.displayName=`${e}.Slot`,n}function vC(e){const t=P.forwardRef((n,r)=>{const{children:a,...o}=n;if(P.isValidElement(a)){const i=_C(a),s=gC(o,a.props);return a.type!==P.Fragment&&(s.ref=r?Tl(r,i):i),P.cloneElement(a,s)}return P.Children.count(a)>1?P.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var hC=Symbol("radix.slottable");function yC(e){return P.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===hC}function gC(e,t){const n={...t};for(const r in t){const a=e[r],o=t[r];/^on[A-Z]/.test(r)?a&&o?n[r]=(...s)=>{const u=o(...s);return a(...s),u}:a&&(n[r]=a):r==="style"?n[r]={...a,...o}:r==="className"&&(n[r]=[a,o].filter(Boolean).join(" "))}return{...e,...n}}function _C(e){var r,a;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(a=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:a.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}function A8(e){const t=e+"CollectionProvider",[n,r]=fs(t),[a,o]=n(t,{collectionRef:{current:null},itemMap:new Map}),i=f=>{const{scope:y,children:v}=f,h=E.useRef(null),_=E.useRef(new Map).current;return b.jsx(a,{scope:y,itemMap:_,collectionRef:h,children:v})};i.displayName=t;const s=e+"CollectionSlot",u=jv(s),l=E.forwardRef((f,y)=>{const{scope:v,children:h}=f,_=o(s,v),w=Qe(y,_.collectionRef);return b.jsx(u,{ref:w,children:h})});l.displayName=s;const p=e+"CollectionItemSlot",c="data-radix-collection-item",m=jv(p),d=E.forwardRef((f,y)=>{const{scope:v,children:h,..._}=f,w=E.useRef(null),x=Qe(y,w),S=o(p,v);return E.useEffect(()=>(S.itemMap.set(w,{ref:w,..._}),()=>void S.itemMap.delete(w))),b.jsx(m,{[c]:"",ref:x,children:h})});d.displayName=p;function g(f){const y=o(e+"CollectionConsumer",f);return E.useCallback(()=>{const h=y.collectionRef.current;if(!h)return[];const _=Array.from(h.querySelectorAll(`[${c}]`));return Array.from(y.itemMap.values()).sort((S,O)=>_.indexOf(S.ref.current)-_.indexOf(O.ref.current))},[y.collectionRef,y.itemMap])}return[{Provider:i,Slot:l,ItemSlot:d},g,r]}var xC=P.createContext(void 0);function U4(e){const t=P.useContext(xC);return e||t||"ltr"}function wC(e){const t=bC(e),n=P.forwardRef((r,a)=>{const{children:o,...i}=r,s=P.Children.toArray(o),u=s.find(PC);if(u){const l=u.props.children,p=s.map(c=>c===u?P.Children.count(l)>1?P.Children.only(null):P.isValidElement(l)?l.props.children:null:c);return b.jsx(t,{...i,ref:a,children:P.isValidElement(l)?P.cloneElement(l,void 0,p):null})}return b.jsx(t,{...i,ref:a,children:o})});return n.displayName=`${e}.Slot`,n}function bC(e){const t=P.forwardRef((n,r)=>{const{children:a,...o}=n;if(P.isValidElement(a)){const i=kC(a),s=OC(o,a.props);return a.type!==P.Fragment&&(s.ref=r?Tl(r,i):i),P.cloneElement(a,s)}return P.Children.count(a)>1?P.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var SC=Symbol("radix.slottable");function PC(e){return P.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===SC}function OC(e,t){const n={...t};for(const r in t){const a=e[r],o=t[r];/^on[A-Z]/.test(r)?a&&o?n[r]=(...s)=>{const u=o(...s);return a(...s),u}:a&&(n[r]=a):r==="style"?n[r]={...a,...o}:r==="className"&&(n[r]=[a,o].filter(Boolean).join(" "))}return{...e,...n}}function kC(e){var r,a;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(a=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:a.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var CC=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Ee=CC.reduce((e,t)=>{const n=wC(`Primitive.${t}`),r=P.forwardRef((a,o)=>{const{asChild:i,...s}=a,u=i?n:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),b.jsx(u,{...s,ref:o})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function AC(e,t){e&&ds.flushSync(()=>e.dispatchEvent(t))}function Aa(e){const t=P.useRef(e);return P.useEffect(()=>{t.current=e}),P.useMemo(()=>(...n)=>{var r;return(r=t.current)==null?void 0:r.call(t,...n)},[])}function EC(e,t=globalThis==null?void 0:globalThis.document){const n=Aa(e);P.useEffect(()=>{const r=a=>{a.key==="Escape"&&n(a)};return t.addEventListener("keydown",r,{capture:!0}),()=>t.removeEventListener("keydown",r,{capture:!0})},[n,t])}var NC="DismissableLayer",n3="dismissableLayer.update",TC="dismissableLayer.pointerDownOutside",jC="dismissableLayer.focusOutside",Rv,E8=P.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),W4=P.forwardRef((e,t)=>{const{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:a,onFocusOutside:o,onInteractOutside:i,onDismiss:s,...u}=e,l=P.useContext(E8),[p,c]=P.useState(null),m=(p==null?void 0:p.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,d]=P.useState({}),g=Qe(t,O=>c(O)),f=Array.from(l.layers),[y]=[...l.layersWithOutsidePointerEventsDisabled].slice(-1),v=f.indexOf(y),h=p?f.indexOf(p):-1,_=l.layersWithOutsidePointerEventsDisabled.size>0,w=h>=v,x=MC(O=>{const k=O.target,C=[...l.branches].some(N=>N.contains(k));!w||C||(a==null||a(O),i==null||i(O),O.defaultPrevented||s==null||s())},m),S=qC(O=>{const k=O.target;[...l.branches].some(N=>N.contains(k))||(o==null||o(O),i==null||i(O),O.defaultPrevented||s==null||s())},m);return EC(O=>{h===l.layers.size-1&&(r==null||r(O),!O.defaultPrevented&&s&&(O.preventDefault(),s()))},m),P.useEffect(()=>{if(p)return n&&(l.layersWithOutsidePointerEventsDisabled.size===0&&(Rv=m.body.style.pointerEvents,m.body.style.pointerEvents="none"),l.layersWithOutsidePointerEventsDisabled.add(p)),l.layers.add(p),$v(),()=>{n&&l.layersWithOutsidePointerEventsDisabled.size===1&&(m.body.style.pointerEvents=Rv)}},[p,m,n,l]),P.useEffect(()=>()=>{p&&(l.layers.delete(p),l.layersWithOutsidePointerEventsDisabled.delete(p),$v())},[p,l]),P.useEffect(()=>{const O=()=>d({});return document.addEventListener(n3,O),()=>document.removeEventListener(n3,O)},[]),b.jsx(Ee.div,{...u,ref:g,style:{pointerEvents:_?w?"auto":"none":void 0,...e.style},onFocusCapture:de(e.onFocusCapture,S.onFocusCapture),onBlurCapture:de(e.onBlurCapture,S.onBlurCapture),onPointerDownCapture:de(e.onPointerDownCapture,x.onPointerDownCapture)})});W4.displayName=NC;var RC="DismissableLayerBranch",$C=P.forwardRef((e,t)=>{const n=P.useContext(E8),r=P.useRef(null),a=Qe(t,r);return P.useEffect(()=>{const o=r.current;if(o)return n.branches.add(o),()=>{n.branches.delete(o)}},[n.branches]),b.jsx(Ee.div,{...e,ref:a})});$C.displayName=RC;function MC(e,t=globalThis==null?void 0:globalThis.document){const n=Aa(e),r=P.useRef(!1),a=P.useRef(()=>{});return P.useEffect(()=>{const o=s=>{if(s.target&&!r.current){let u=function(){N8(TC,n,l,{discrete:!0})};const l={originalEvent:s};s.pointerType==="touch"?(t.removeEventListener("click",a.current),a.current=u,t.addEventListener("click",a.current,{once:!0})):u()}else t.removeEventListener("click",a.current);r.current=!1},i=window.setTimeout(()=>{t.addEventListener("pointerdown",o)},0);return()=>{window.clearTimeout(i),t.removeEventListener("pointerdown",o),t.removeEventListener("click",a.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function qC(e,t=globalThis==null?void 0:globalThis.document){const n=Aa(e),r=P.useRef(!1);return P.useEffect(()=>{const a=o=>{o.target&&!r.current&&N8(jC,n,{originalEvent:o},{discrete:!1})};return t.addEventListener("focusin",a),()=>t.removeEventListener("focusin",a)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function $v(){const e=new CustomEvent(n3);document.dispatchEvent(e)}function N8(e,t,n,{discrete:r}){const a=n.originalEvent.target,o=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&a.addEventListener(e,t,{once:!0}),r?AC(a,o):a.dispatchEvent(o)}var Sm=0;function IC(){P.useEffect(()=>{const e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??Mv()),document.body.insertAdjacentElement("beforeend",e[1]??Mv()),Sm++,()=>{Sm===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(t=>t.remove()),Sm--}},[])}function Mv(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var Pm="focusScope.autoFocusOnMount",Om="focusScope.autoFocusOnUnmount",qv={bubbles:!1,cancelable:!0},DC="FocusScope",T8=P.forwardRef((e,t)=>{const{loop:n=!1,trapped:r=!1,onMountAutoFocus:a,onUnmountAutoFocus:o,...i}=e,[s,u]=P.useState(null),l=Aa(a),p=Aa(o),c=P.useRef(null),m=Qe(t,f=>u(f)),d=P.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;P.useEffect(()=>{if(r){let f=function(_){if(d.paused||!s)return;const w=_.target;s.contains(w)?c.current=w:Qr(c.current,{select:!0})},y=function(_){if(d.paused||!s)return;const w=_.relatedTarget;w!==null&&(s.contains(w)||Qr(c.current,{select:!0}))},v=function(_){if(document.activeElement===document.body)for(const x of _)x.removedNodes.length>0&&Qr(s)};document.addEventListener("focusin",f),document.addEventListener("focusout",y);const h=new MutationObserver(v);return s&&h.observe(s,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",f),document.removeEventListener("focusout",y),h.disconnect()}}},[r,s,d.paused]),P.useEffect(()=>{if(s){Dv.add(d);const f=document.activeElement;if(!s.contains(f)){const v=new CustomEvent(Pm,qv);s.addEventListener(Pm,l),s.dispatchEvent(v),v.defaultPrevented||(LC(zC(j8(s)),{select:!0}),document.activeElement===f&&Qr(s))}return()=>{s.removeEventListener(Pm,l),setTimeout(()=>{const v=new CustomEvent(Om,qv);s.addEventListener(Om,p),s.dispatchEvent(v),v.defaultPrevented||Qr(f??document.body,{select:!0}),s.removeEventListener(Om,p),Dv.remove(d)},0)}}},[s,l,p,d]);const g=P.useCallback(f=>{if(!n&&!r||d.paused)return;const y=f.key==="Tab"&&!f.altKey&&!f.ctrlKey&&!f.metaKey,v=document.activeElement;if(y&&v){const h=f.currentTarget,[_,w]=HC(h);_&&w?!f.shiftKey&&v===w?(f.preventDefault(),n&&Qr(_,{select:!0})):f.shiftKey&&v===_&&(f.preventDefault(),n&&Qr(w,{select:!0})):v===h&&f.preventDefault()}},[n,r,d.paused]);return b.jsx(Ee.div,{tabIndex:-1,...i,ref:m,onKeyDown:g})});T8.displayName=DC;function LC(e,{select:t=!1}={}){const n=document.activeElement;for(const r of e)if(Qr(r,{select:t}),document.activeElement!==n)return}function HC(e){const t=j8(e),n=Iv(t,e),r=Iv(t.reverse(),e);return[n,r]}function j8(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const a=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||a?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function Iv(e,t){for(const n of e)if(!GC(n,{upTo:t}))return n}function GC(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function BC(e){return e instanceof HTMLInputElement&&"select"in e}function Qr(e,{select:t=!1}={}){if(e&&e.focus){const n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&BC(e)&&t&&e.select()}}var Dv=FC();function FC(){let e=[];return{add(t){const n=e[0];t!==n&&(n==null||n.pause()),e=Lv(e,t),e.unshift(t)},remove(t){var n;e=Lv(e,t),(n=e[0])==null||n.resume()}}}function Lv(e,t){const n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function zC(e){return e.filter(t=>t.tagName!=="A")}var jt=globalThis!=null&&globalThis.document?P.useLayoutEffect:()=>{},UC=e4[" useId ".trim().toString()]||(()=>{}),WC=0;function jl(e){const[t,n]=P.useState(UC());return jt(()=>{n(r=>r??String(WC++))},[e]),t?`radix-${t}`:""}const VC=["top","right","bottom","left"],Ea=Math.min,Jt=Math.max,hp=Math.round,sc=Math.floor,pr=e=>({x:e,y:e}),KC={left:"right",right:"left",bottom:"top",top:"bottom"};function r3(e,t,n){return Jt(e,Ea(t,n))}function Ir(e,t){return typeof e=="function"?e(t):e}function Dr(e){return e.split("-")[0]}function vs(e){return e.split("-")[1]}function V4(e){return e==="x"?"y":"x"}function K4(e){return e==="y"?"height":"width"}function ar(e){const t=e[0];return t==="t"||t==="b"?"y":"x"}function X4(e){return V4(ar(e))}function XC(e,t,n){n===void 0&&(n=!1);const r=vs(e),a=X4(e),o=K4(a);let i=a==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return t.reference[o]>t.floating[o]&&(i=yp(i)),[i,yp(i)]}function YC(e){const t=yp(e);return[a3(e),t,a3(t)]}function a3(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}const Hv=["left","right"],Gv=["right","left"],QC=["top","bottom"],ZC=["bottom","top"];function JC(e,t,n){switch(e){case"top":case"bottom":return n?t?Gv:Hv:t?Hv:Gv;case"left":case"right":return t?QC:ZC;default:return[]}}function eA(e,t,n,r){const a=vs(e);let o=JC(Dr(e),n==="start",r);return a&&(o=o.map(i=>i+"-"+a),t&&(o=o.concat(o.map(a3)))),o}function yp(e){const t=Dr(e);return KC[t]+e.slice(t.length)}function tA(e){return{top:0,right:0,bottom:0,left:0,...e}}function R8(e){return typeof e!="number"?tA(e):{top:e,right:e,bottom:e,left:e}}function gp(e){const{x:t,y:n,width:r,height:a}=e;return{width:r,height:a,top:n,left:t,right:t+r,bottom:n+a,x:t,y:n}}function Bv(e,t,n){let{reference:r,floating:a}=e;const o=ar(t),i=X4(t),s=K4(i),u=Dr(t),l=o==="y",p=r.x+r.width/2-a.width/2,c=r.y+r.height/2-a.height/2,m=r[s]/2-a[s]/2;let d;switch(u){case"top":d={x:p,y:r.y-a.height};break;case"bottom":d={x:p,y:r.y+r.height};break;case"right":d={x:r.x+r.width,y:c};break;case"left":d={x:r.x-a.width,y:c};break;default:d={x:r.x,y:r.y}}switch(vs(t)){case"start":d[i]-=m*(n&&l?-1:1);break;case"end":d[i]+=m*(n&&l?-1:1);break}return d}async function nA(e,t){var n;t===void 0&&(t={});const{x:r,y:a,platform:o,rects:i,elements:s,strategy:u}=e,{boundary:l="clippingAncestors",rootBoundary:p="viewport",elementContext:c="floating",altBoundary:m=!1,padding:d=0}=Ir(t,e),g=R8(d),y=s[m?c==="floating"?"reference":"floating":c],v=gp(await o.getClippingRect({element:(n=await(o.isElement==null?void 0:o.isElement(y)))==null||n?y:y.contextElement||await(o.getDocumentElement==null?void 0:o.getDocumentElement(s.floating)),boundary:l,rootBoundary:p,strategy:u})),h=c==="floating"?{x:r,y:a,width:i.floating.width,height:i.floating.height}:i.reference,_=await(o.getOffsetParent==null?void 0:o.getOffsetParent(s.floating)),w=await(o.isElement==null?void 0:o.isElement(_))?await(o.getScale==null?void 0:o.getScale(_))||{x:1,y:1}:{x:1,y:1},x=gp(o.convertOffsetParentRelativeRectToViewportRelativeRect?await o.convertOffsetParentRelativeRectToViewportRelativeRect({elements:s,rect:h,offsetParent:_,strategy:u}):h);return{top:(v.top-x.top+g.top)/w.y,bottom:(x.bottom-v.bottom+g.bottom)/w.y,left:(v.left-x.left+g.left)/w.x,right:(x.right-v.right+g.right)/w.x}}const rA=50,aA=async(e,t,n)=>{const{placement:r="bottom",strategy:a="absolute",middleware:o=[],platform:i}=n,s=i.detectOverflow?i:{...i,detectOverflow:nA},u=await(i.isRTL==null?void 0:i.isRTL(t));let l=await i.getElementRects({reference:e,floating:t,strategy:a}),{x:p,y:c}=Bv(l,r,u),m=r,d=0;const g={};for(let f=0;f({name:"arrow",options:e,async fn(t){const{x:n,y:r,placement:a,rects:o,platform:i,elements:s,middlewareData:u}=t,{element:l,padding:p=0}=Ir(e,t)||{};if(l==null)return{};const c=R8(p),m={x:n,y:r},d=X4(a),g=K4(d),f=await i.getDimensions(l),y=d==="y",v=y?"top":"left",h=y?"bottom":"right",_=y?"clientHeight":"clientWidth",w=o.reference[g]+o.reference[d]-m[d]-o.floating[g],x=m[d]-o.reference[d],S=await(i.getOffsetParent==null?void 0:i.getOffsetParent(l));let O=S?S[_]:0;(!O||!await(i.isElement==null?void 0:i.isElement(S)))&&(O=s.floating[_]||o.floating[g]);const k=w/2-x/2,C=O/2-f[g]/2-1,N=Ea(c[v],C),T=Ea(c[h],C),A=N,$=O-f[g]-T,R=O/2-f[g]/2+k,q=r3(A,R,$),M=!u.arrow&&vs(a)!=null&&R!==q&&o.reference[g]/2-(RR<=0)){var T,A;const R=(((T=o.flip)==null?void 0:T.index)||0)+1,q=O[R];if(q&&(!(c==="alignment"?h!==ar(q):!1)||N.every(j=>ar(j.placement)===h?j.overflows[0]>0:!0)))return{data:{index:R,overflows:N},reset:{placement:q}};let M=(A=N.filter(D=>D.overflows[0]<=0).sort((D,j)=>D.overflows[1]-j.overflows[1])[0])==null?void 0:A.placement;if(!M)switch(d){case"bestFit":{var $;const D=($=N.filter(j=>{if(S){const I=ar(j.placement);return I===h||I==="y"}return!0}).map(j=>[j.placement,j.overflows.filter(I=>I>0).reduce((I,B)=>I+B,0)]).sort((j,I)=>j[1]-I[1])[0])==null?void 0:$[0];D&&(M=D);break}case"initialPlacement":M=s;break}if(a!==M)return{reset:{placement:M}}}return{}}}};function Fv(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function zv(e){return VC.some(t=>e[t]>=0)}const sA=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:n,platform:r}=t,{strategy:a="referenceHidden",...o}=Ir(e,t);switch(a){case"referenceHidden":{const i=await r.detectOverflow(t,{...o,elementContext:"reference"}),s=Fv(i,n.reference);return{data:{referenceHiddenOffsets:s,referenceHidden:zv(s)}}}case"escaped":{const i=await r.detectOverflow(t,{...o,altBoundary:!0}),s=Fv(i,n.floating);return{data:{escapedOffsets:s,escaped:zv(s)}}}default:return{}}}}},$8=new Set(["left","top"]);async function uA(e,t){const{placement:n,platform:r,elements:a}=e,o=await(r.isRTL==null?void 0:r.isRTL(a.floating)),i=Dr(n),s=vs(n),u=ar(n)==="y",l=$8.has(i)?-1:1,p=o&&u?-1:1,c=Ir(t,e);let{mainAxis:m,crossAxis:d,alignmentAxis:g}=typeof c=="number"?{mainAxis:c,crossAxis:0,alignmentAxis:null}:{mainAxis:c.mainAxis||0,crossAxis:c.crossAxis||0,alignmentAxis:c.alignmentAxis};return s&&typeof g=="number"&&(d=s==="end"?g*-1:g),u?{x:d*p,y:m*l}:{x:m*l,y:d*p}}const lA=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,r;const{x:a,y:o,placement:i,middlewareData:s}=t,u=await uA(t,e);return i===((n=s.offset)==null?void 0:n.placement)&&(r=s.arrow)!=null&&r.alignmentOffset?{}:{x:a+u.x,y:o+u.y,data:{...u,placement:i}}}}},cA=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:r,placement:a,platform:o}=t,{mainAxis:i=!0,crossAxis:s=!1,limiter:u={fn:v=>{let{x:h,y:_}=v;return{x:h,y:_}}},...l}=Ir(e,t),p={x:n,y:r},c=await o.detectOverflow(t,l),m=ar(Dr(a)),d=V4(m);let g=p[d],f=p[m];if(i){const v=d==="y"?"top":"left",h=d==="y"?"bottom":"right",_=g+c[v],w=g-c[h];g=r3(_,g,w)}if(s){const v=m==="y"?"top":"left",h=m==="y"?"bottom":"right",_=f+c[v],w=f-c[h];f=r3(_,f,w)}const y=u.fn({...t,[d]:g,[m]:f});return{...y,data:{x:y.x-n,y:y.y-r,enabled:{[d]:i,[m]:s}}}}}},pA=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:n,y:r,placement:a,rects:o,middlewareData:i}=t,{offset:s=0,mainAxis:u=!0,crossAxis:l=!0}=Ir(e,t),p={x:n,y:r},c=ar(a),m=V4(c);let d=p[m],g=p[c];const f=Ir(s,t),y=typeof f=="number"?{mainAxis:f,crossAxis:0}:{mainAxis:0,crossAxis:0,...f};if(u){const _=m==="y"?"height":"width",w=o.reference[m]-o.floating[_]+y.mainAxis,x=o.reference[m]+o.reference[_]-y.mainAxis;dx&&(d=x)}if(l){var v,h;const _=m==="y"?"width":"height",w=$8.has(Dr(a)),x=o.reference[c]-o.floating[_]+(w&&((v=i.offset)==null?void 0:v[c])||0)+(w?0:y.crossAxis),S=o.reference[c]+o.reference[_]+(w?0:((h=i.offset)==null?void 0:h[c])||0)-(w?y.crossAxis:0);gS&&(g=S)}return{[m]:d,[c]:g}}}},mA=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){var n,r;const{placement:a,rects:o,platform:i,elements:s}=t,{apply:u=()=>{},...l}=Ir(e,t),p=await i.detectOverflow(t,l),c=Dr(a),m=vs(a),d=ar(a)==="y",{width:g,height:f}=o.floating;let y,v;c==="top"||c==="bottom"?(y=c,v=m===(await(i.isRTL==null?void 0:i.isRTL(s.floating))?"start":"end")?"left":"right"):(v=c,y=m==="end"?"top":"bottom");const h=f-p.top-p.bottom,_=g-p.left-p.right,w=Ea(f-p[y],h),x=Ea(g-p[v],_),S=!t.middlewareData.shift;let O=w,k=x;if((n=t.middlewareData.shift)!=null&&n.enabled.x&&(k=_),(r=t.middlewareData.shift)!=null&&r.enabled.y&&(O=h),S&&!m){const N=Jt(p.left,0),T=Jt(p.right,0),A=Jt(p.top,0),$=Jt(p.bottom,0);d?k=g-2*(N!==0||T!==0?N+T:Jt(p.left,p.right)):O=f-2*(A!==0||$!==0?A+$:Jt(p.top,p.bottom))}await u({...t,availableWidth:k,availableHeight:O});const C=await i.getDimensions(s.floating);return g!==C.width||f!==C.height?{reset:{rects:!0}}:{}}}};function U0(){return typeof window<"u"}function hs(e){return M8(e)?(e.nodeName||"").toLowerCase():"#document"}function an(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function hr(e){var t;return(t=(M8(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function M8(e){return U0()?e instanceof Node||e instanceof an(e).Node:!1}function Un(e){return U0()?e instanceof Element||e instanceof an(e).Element:!1}function Fr(e){return U0()?e instanceof HTMLElement||e instanceof an(e).HTMLElement:!1}function Uv(e){return!U0()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof an(e).ShadowRoot}function Rl(e){const{overflow:t,overflowX:n,overflowY:r,display:a}=Wn(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&a!=="inline"&&a!=="contents"}function dA(e){return/^(table|td|th)$/.test(hs(e))}function W0(e){try{if(e.matches(":popover-open"))return!0}catch{}try{return e.matches(":modal")}catch{return!1}}const fA=/transform|translate|scale|rotate|perspective|filter/,vA=/paint|layout|strict|content/,za=e=>!!e&&e!=="none";let km;function Y4(e){const t=Un(e)?Wn(e):e;return za(t.transform)||za(t.translate)||za(t.scale)||za(t.rotate)||za(t.perspective)||!Q4()&&(za(t.backdropFilter)||za(t.filter))||fA.test(t.willChange||"")||vA.test(t.contain||"")}function hA(e){let t=Na(e);for(;Fr(t)&&!qi(t);){if(Y4(t))return t;if(W0(t))return null;t=Na(t)}return null}function Q4(){return km==null&&(km=typeof CSS<"u"&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),km}function qi(e){return/^(html|body|#document)$/.test(hs(e))}function Wn(e){return an(e).getComputedStyle(e)}function V0(e){return Un(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Na(e){if(hs(e)==="html")return e;const t=e.assignedSlot||e.parentNode||Uv(e)&&e.host||hr(e);return Uv(t)?t.host:t}function q8(e){const t=Na(e);return qi(t)?e.ownerDocument?e.ownerDocument.body:e.body:Fr(t)&&Rl(t)?t:q8(t)}function Du(e,t,n){var r;t===void 0&&(t=[]),n===void 0&&(n=!0);const a=q8(e),o=a===((r=e.ownerDocument)==null?void 0:r.body),i=an(a);if(o){const s=o3(i);return t.concat(i,i.visualViewport||[],Rl(a)?a:[],s&&n?Du(s):[])}else return t.concat(a,Du(a,[],n))}function o3(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function I8(e){const t=Wn(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const a=Fr(e),o=a?e.offsetWidth:n,i=a?e.offsetHeight:r,s=hp(n)!==o||hp(r)!==i;return s&&(n=o,r=i),{width:n,height:r,$:s}}function Z4(e){return Un(e)?e:e.contextElement}function di(e){const t=Z4(e);if(!Fr(t))return pr(1);const n=t.getBoundingClientRect(),{width:r,height:a,$:o}=I8(t);let i=(o?hp(n.width):n.width)/r,s=(o?hp(n.height):n.height)/a;return(!i||!Number.isFinite(i))&&(i=1),(!s||!Number.isFinite(s))&&(s=1),{x:i,y:s}}const yA=pr(0);function D8(e){const t=an(e);return!Q4()||!t.visualViewport?yA:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function gA(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==an(e)?!1:t}function bo(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);const a=e.getBoundingClientRect(),o=Z4(e);let i=pr(1);t&&(r?Un(r)&&(i=di(r)):i=di(e));const s=gA(o,n,r)?D8(o):pr(0);let u=(a.left+s.x)/i.x,l=(a.top+s.y)/i.y,p=a.width/i.x,c=a.height/i.y;if(o){const m=an(o),d=r&&Un(r)?an(r):r;let g=m,f=o3(g);for(;f&&r&&d!==g;){const y=di(f),v=f.getBoundingClientRect(),h=Wn(f),_=v.left+(f.clientLeft+parseFloat(h.paddingLeft))*y.x,w=v.top+(f.clientTop+parseFloat(h.paddingTop))*y.y;u*=y.x,l*=y.y,p*=y.x,c*=y.y,u+=_,l+=w,g=an(f),f=o3(g)}}return gp({width:p,height:c,x:u,y:l})}function K0(e,t){const n=V0(e).scrollLeft;return t?t.left+n:bo(hr(e)).left+n}function L8(e,t){const n=e.getBoundingClientRect(),r=n.left+t.scrollLeft-K0(e,n),a=n.top+t.scrollTop;return{x:r,y:a}}function _A(e){let{elements:t,rect:n,offsetParent:r,strategy:a}=e;const o=a==="fixed",i=hr(r),s=t?W0(t.floating):!1;if(r===i||s&&o)return n;let u={scrollLeft:0,scrollTop:0},l=pr(1);const p=pr(0),c=Fr(r);if((c||!c&&!o)&&((hs(r)!=="body"||Rl(i))&&(u=V0(r)),c)){const d=bo(r);l=di(r),p.x=d.x+r.clientLeft,p.y=d.y+r.clientTop}const m=i&&!c&&!o?L8(i,u):pr(0);return{width:n.width*l.x,height:n.height*l.y,x:n.x*l.x-u.scrollLeft*l.x+p.x+m.x,y:n.y*l.y-u.scrollTop*l.y+p.y+m.y}}function xA(e){return Array.from(e.getClientRects())}function wA(e){const t=hr(e),n=V0(e),r=e.ownerDocument.body,a=Jt(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),o=Jt(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight);let i=-n.scrollLeft+K0(e);const s=-n.scrollTop;return Wn(r).direction==="rtl"&&(i+=Jt(t.clientWidth,r.clientWidth)-a),{width:a,height:o,x:i,y:s}}const Wv=25;function bA(e,t){const n=an(e),r=hr(e),a=n.visualViewport;let o=r.clientWidth,i=r.clientHeight,s=0,u=0;if(a){o=a.width,i=a.height;const p=Q4();(!p||p&&t==="fixed")&&(s=a.offsetLeft,u=a.offsetTop)}const l=K0(r);if(l<=0){const p=r.ownerDocument,c=p.body,m=getComputedStyle(c),d=p.compatMode==="CSS1Compat"&&parseFloat(m.marginLeft)+parseFloat(m.marginRight)||0,g=Math.abs(r.clientWidth-c.clientWidth-d);g<=Wv&&(o-=g)}else l<=Wv&&(o+=l);return{width:o,height:i,x:s,y:u}}function SA(e,t){const n=bo(e,!0,t==="fixed"),r=n.top+e.clientTop,a=n.left+e.clientLeft,o=Fr(e)?di(e):pr(1),i=e.clientWidth*o.x,s=e.clientHeight*o.y,u=a*o.x,l=r*o.y;return{width:i,height:s,x:u,y:l}}function Vv(e,t,n){let r;if(t==="viewport")r=bA(e,n);else if(t==="document")r=wA(hr(e));else if(Un(t))r=SA(t,n);else{const a=D8(e);r={x:t.x-a.x,y:t.y-a.y,width:t.width,height:t.height}}return gp(r)}function H8(e,t){const n=Na(e);return n===t||!Un(n)||qi(n)?!1:Wn(n).position==="fixed"||H8(n,t)}function PA(e,t){const n=t.get(e);if(n)return n;let r=Du(e,[],!1).filter(s=>Un(s)&&hs(s)!=="body"),a=null;const o=Wn(e).position==="fixed";let i=o?Na(e):e;for(;Un(i)&&!qi(i);){const s=Wn(i),u=Y4(i);!u&&s.position==="fixed"&&(a=null),(o?!u&&!a:!u&&s.position==="static"&&!!a&&(a.position==="absolute"||a.position==="fixed")||Rl(i)&&!u&&H8(e,i))?r=r.filter(p=>p!==i):a=s,i=Na(i)}return t.set(e,r),r}function OA(e){let{element:t,boundary:n,rootBoundary:r,strategy:a}=e;const i=[...n==="clippingAncestors"?W0(t)?[]:PA(t,this._c):[].concat(n),r],s=Vv(t,i[0],a);let u=s.top,l=s.right,p=s.bottom,c=s.left;for(let m=1;m{i(!1,1e-7)},1e3)}O===1&&!B8(l,e.getBoundingClientRect())&&i(),w=!1}try{n=new IntersectionObserver(x,{..._,root:a.ownerDocument})}catch{n=new IntersectionObserver(x,_)}n.observe(e)}return i(!0),o}function jA(e,t,n,r){r===void 0&&(r={});const{ancestorScroll:a=!0,ancestorResize:o=!0,elementResize:i=typeof ResizeObserver=="function",layoutShift:s=typeof IntersectionObserver=="function",animationFrame:u=!1}=r,l=Z4(e),p=a||o?[...l?Du(l):[],...t?Du(t):[]]:[];p.forEach(v=>{a&&v.addEventListener("scroll",n,{passive:!0}),o&&v.addEventListener("resize",n)});const c=l&&s?TA(l,n):null;let m=-1,d=null;i&&(d=new ResizeObserver(v=>{let[h]=v;h&&h.target===l&&d&&t&&(d.unobserve(t),cancelAnimationFrame(m),m=requestAnimationFrame(()=>{var _;(_=d)==null||_.observe(t)})),n()}),l&&!u&&d.observe(l),t&&d.observe(t));let g,f=u?bo(e):null;u&&y();function y(){const v=bo(e);f&&!B8(f,v)&&n(),f=v,g=requestAnimationFrame(y)}return n(),()=>{var v;p.forEach(h=>{a&&h.removeEventListener("scroll",n),o&&h.removeEventListener("resize",n)}),c==null||c(),(v=d)==null||v.disconnect(),d=null,u&&cancelAnimationFrame(g)}}const RA=lA,$A=cA,MA=iA,qA=mA,IA=sA,Xv=oA,DA=pA,LA=(e,t,n)=>{const r=new Map,a={platform:NA,...n},o={...a.platform,_c:r};return aA(e,t,{...a,platform:o})};var HA=typeof document<"u",GA=function(){},Hc=HA?P.useLayoutEffect:GA;function _p(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let n,r,a;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(!_p(e[r],t[r]))return!1;return!0}if(a=Object.keys(e),n=a.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!{}.hasOwnProperty.call(t,a[r]))return!1;for(r=n;r--!==0;){const o=a[r];if(!(o==="_owner"&&e.$$typeof)&&!_p(e[o],t[o]))return!1}return!0}return e!==e&&t!==t}function F8(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Yv(e,t){const n=F8(e);return Math.round(t*n)/n}function Am(e){const t=P.useRef(e);return Hc(()=>{t.current=e}),t}function BA(e){e===void 0&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:r=[],platform:a,elements:{reference:o,floating:i}={},transform:s=!0,whileElementsMounted:u,open:l}=e,[p,c]=P.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[m,d]=P.useState(r);_p(m,r)||d(r);const[g,f]=P.useState(null),[y,v]=P.useState(null),h=P.useCallback(j=>{j!==S.current&&(S.current=j,f(j))},[]),_=P.useCallback(j=>{j!==O.current&&(O.current=j,v(j))},[]),w=o||g,x=i||y,S=P.useRef(null),O=P.useRef(null),k=P.useRef(p),C=u!=null,N=Am(u),T=Am(a),A=Am(l),$=P.useCallback(()=>{if(!S.current||!O.current)return;const j={placement:t,strategy:n,middleware:m};T.current&&(j.platform=T.current),LA(S.current,O.current,j).then(I=>{const B={...I,isPositioned:A.current!==!1};R.current&&!_p(k.current,B)&&(k.current=B,ds.flushSync(()=>{c(B)}))})},[m,t,n,T,A]);Hc(()=>{l===!1&&k.current.isPositioned&&(k.current.isPositioned=!1,c(j=>({...j,isPositioned:!1})))},[l]);const R=P.useRef(!1);Hc(()=>(R.current=!0,()=>{R.current=!1}),[]),Hc(()=>{if(w&&(S.current=w),x&&(O.current=x),w&&x){if(N.current)return N.current(w,x,$);$()}},[w,x,$,N,C]);const q=P.useMemo(()=>({reference:S,floating:O,setReference:h,setFloating:_}),[h,_]),M=P.useMemo(()=>({reference:w,floating:x}),[w,x]),D=P.useMemo(()=>{const j={position:n,left:0,top:0};if(!M.floating)return j;const I=Yv(M.floating,p.x),B=Yv(M.floating,p.y);return s?{...j,transform:"translate("+I+"px, "+B+"px)",...F8(M.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:I,top:B}},[n,s,M.floating,p.x,p.y]);return P.useMemo(()=>({...p,update:$,refs:q,elements:M,floatingStyles:D}),[p,$,q,M,D])}const FA=e=>{function t(n){return{}.hasOwnProperty.call(n,"current")}return{name:"arrow",options:e,fn(n){const{element:r,padding:a}=typeof e=="function"?e(n):e;return r&&t(r)?r.current!=null?Xv({element:r.current,padding:a}).fn(n):{}:r?Xv({element:r,padding:a}).fn(n):{}}}},zA=(e,t)=>{const n=RA(e);return{name:n.name,fn:n.fn,options:[e,t]}},UA=(e,t)=>{const n=$A(e);return{name:n.name,fn:n.fn,options:[e,t]}},WA=(e,t)=>({fn:DA(e).fn,options:[e,t]}),VA=(e,t)=>{const n=MA(e);return{name:n.name,fn:n.fn,options:[e,t]}},KA=(e,t)=>{const n=qA(e);return{name:n.name,fn:n.fn,options:[e,t]}},XA=(e,t)=>{const n=IA(e);return{name:n.name,fn:n.fn,options:[e,t]}},YA=(e,t)=>{const n=FA(e);return{name:n.name,fn:n.fn,options:[e,t]}};var QA="Arrow",z8=P.forwardRef((e,t)=>{const{children:n,width:r=10,height:a=5,...o}=e;return b.jsx(Ee.svg,{...o,ref:t,width:r,height:a,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?n:b.jsx("polygon",{points:"0,0 30,0 15,10"})})});z8.displayName=QA;var ZA=z8;function JA(e){const[t,n]=P.useState(void 0);return jt(()=>{if(e){n({width:e.offsetWidth,height:e.offsetHeight});const r=new ResizeObserver(a=>{if(!Array.isArray(a)||!a.length)return;const o=a[0];let i,s;if("borderBoxSize"in o){const u=o.borderBoxSize,l=Array.isArray(u)?u[0]:u;i=l.inlineSize,s=l.blockSize}else i=e.offsetWidth,s=e.offsetHeight;n({width:i,height:s})});return r.observe(e,{box:"border-box"}),()=>r.unobserve(e)}else n(void 0)},[e]),t}var J4="Popper",[U8,X0]=fs(J4),[eE,W8]=U8(J4),V8=e=>{const{__scopePopper:t,children:n}=e,[r,a]=P.useState(null);return b.jsx(eE,{scope:t,anchor:r,onAnchorChange:a,children:n})};V8.displayName=J4;var K8="PopperAnchor",X8=P.forwardRef((e,t)=>{const{__scopePopper:n,virtualRef:r,...a}=e,o=W8(K8,n),i=P.useRef(null),s=Qe(t,i),u=P.useRef(null);return P.useEffect(()=>{const l=u.current;u.current=(r==null?void 0:r.current)||i.current,l!==u.current&&o.onAnchorChange(u.current)}),r?null:b.jsx(Ee.div,{...a,ref:s})});X8.displayName=K8;var e9="PopperContent",[tE,nE]=U8(e9),Y8=P.forwardRef((e,t)=>{var J,ue,W,K,X,L;const{__scopePopper:n,side:r="bottom",sideOffset:a=0,align:o="center",alignOffset:i=0,arrowPadding:s=0,avoidCollisions:u=!0,collisionBoundary:l=[],collisionPadding:p=0,sticky:c="partial",hideWhenDetached:m=!1,updatePositionStrategy:d="optimized",onPlaced:g,...f}=e,y=W8(e9,n),[v,h]=P.useState(null),_=Qe(t,pe=>h(pe)),[w,x]=P.useState(null),S=JA(w),O=(S==null?void 0:S.width)??0,k=(S==null?void 0:S.height)??0,C=r+(o!=="center"?"-"+o:""),N=typeof p=="number"?p:{top:0,right:0,bottom:0,left:0,...p},T=Array.isArray(l)?l:[l],A=T.length>0,$={padding:N,boundary:T.filter(aE),altBoundary:A},{refs:R,floatingStyles:q,placement:M,isPositioned:D,middlewareData:j}=BA({strategy:"fixed",placement:C,whileElementsMounted:(...pe)=>jA(...pe,{animationFrame:d==="always"}),elements:{reference:y.anchor},middleware:[zA({mainAxis:a+k,alignmentAxis:i}),u&&UA({mainAxis:!0,crossAxis:!1,limiter:c==="partial"?WA():void 0,...$}),u&&VA({...$}),KA({...$,apply:({elements:pe,rects:re,availableWidth:Re,availableHeight:$e})=>{const{width:Ze,height:Xn}=re.reference,On=pe.floating.style;On.setProperty("--radix-popper-available-width",`${Re}px`),On.setProperty("--radix-popper-available-height",`${$e}px`),On.setProperty("--radix-popper-anchor-width",`${Ze}px`),On.setProperty("--radix-popper-anchor-height",`${Xn}px`)}}),w&&YA({element:w,padding:s}),oE({arrowWidth:O,arrowHeight:k}),m&&XA({strategy:"referenceHidden",...$})]}),[I,B]=J8(M),U=Aa(g);jt(()=>{D&&(U==null||U())},[D,U]);const F=(J=j.arrow)==null?void 0:J.x,Z=(ue=j.arrow)==null?void 0:ue.y,ie=((W=j.arrow)==null?void 0:W.centerOffset)!==0,[he,be]=P.useState();return jt(()=>{v&&be(window.getComputedStyle(v).zIndex)},[v]),b.jsx("div",{ref:R.setFloating,"data-radix-popper-content-wrapper":"",style:{...q,transform:D?q.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:he,"--radix-popper-transform-origin":[(K=j.transformOrigin)==null?void 0:K.x,(X=j.transformOrigin)==null?void 0:X.y].join(" "),...((L=j.hide)==null?void 0:L.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}},dir:e.dir,children:b.jsx(tE,{scope:n,placedSide:I,onArrowChange:x,arrowX:F,arrowY:Z,shouldHideArrow:ie,children:b.jsx(Ee.div,{"data-side":I,"data-align":B,...f,ref:_,style:{...f.style,animation:D?void 0:"none"}})})})});Y8.displayName=e9;var Q8="PopperArrow",rE={top:"bottom",right:"left",bottom:"top",left:"right"},Z8=P.forwardRef(function(t,n){const{__scopePopper:r,...a}=t,o=nE(Q8,r),i=rE[o.placedSide];return b.jsx("span",{ref:o.onArrowChange,style:{position:"absolute",left:o.arrowX,top:o.arrowY,[i]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[o.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[o.placedSide],visibility:o.shouldHideArrow?"hidden":void 0},children:b.jsx(ZA,{...a,ref:n,style:{...a.style,display:"block"}})})});Z8.displayName=Q8;function aE(e){return e!==null}var oE=e=>({name:"transformOrigin",options:e,fn(t){var y,v,h;const{placement:n,rects:r,middlewareData:a}=t,i=((y=a.arrow)==null?void 0:y.centerOffset)!==0,s=i?0:e.arrowWidth,u=i?0:e.arrowHeight,[l,p]=J8(n),c={start:"0%",center:"50%",end:"100%"}[p],m=(((v=a.arrow)==null?void 0:v.x)??0)+s/2,d=(((h=a.arrow)==null?void 0:h.y)??0)+u/2;let g="",f="";return l==="bottom"?(g=i?c:`${m}px`,f=`${-u}px`):l==="top"?(g=i?c:`${m}px`,f=`${r.floating.height+u}px`):l==="right"?(g=`${-u}px`,f=i?c:`${d}px`):l==="left"&&(g=`${r.floating.width+u}px`,f=i?c:`${d}px`),{data:{x:g,y:f}}}});function J8(e){const[t,n="center"]=e.split("-");return[t,n]}var iE=V8,e_=X8,t_=Y8,n_=Z8,sE="Portal",r_=P.forwardRef((e,t)=>{var s;const{container:n,...r}=e,[a,o]=P.useState(!1);jt(()=>o(!0),[]);const i=n||a&&((s=globalThis==null?void 0:globalThis.document)==null?void 0:s.body);return i?dC.createPortal(b.jsx(Ee.div,{...r,ref:t}),i):null});r_.displayName=sE;function uE(e){const t=lE(e),n=P.forwardRef((r,a)=>{const{children:o,...i}=r,s=P.Children.toArray(o),u=s.find(pE);if(u){const l=u.props.children,p=s.map(c=>c===u?P.Children.count(l)>1?P.Children.only(null):P.isValidElement(l)?l.props.children:null:c);return b.jsx(t,{...i,ref:a,children:P.isValidElement(l)?P.cloneElement(l,void 0,p):null})}return b.jsx(t,{...i,ref:a,children:o})});return n.displayName=`${e}.Slot`,n}function lE(e){const t=P.forwardRef((n,r)=>{const{children:a,...o}=n;if(P.isValidElement(a)){const i=dE(a),s=mE(o,a.props);return a.type!==P.Fragment&&(s.ref=r?Tl(r,i):i),P.cloneElement(a,s)}return P.Children.count(a)>1?P.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var cE=Symbol("radix.slottable");function pE(e){return P.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===cE}function mE(e,t){const n={...t};for(const r in t){const a=e[r],o=t[r];/^on[A-Z]/.test(r)?a&&o?n[r]=(...s)=>{const u=o(...s);return a(...s),u}:a&&(n[r]=a):r==="style"?n[r]={...a,...o}:r==="className"&&(n[r]=[a,o].filter(Boolean).join(" "))}return{...e,...n}}function dE(e){var r,a;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(a=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:a.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var fE=e4[" useInsertionEffect ".trim().toString()]||jt;function xp({prop:e,defaultProp:t,onChange:n=()=>{},caller:r}){const[a,o,i]=vE({defaultProp:t,onChange:n}),s=e!==void 0,u=s?e:a;{const p=P.useRef(e!==void 0);P.useEffect(()=>{const c=p.current;c!==s&&console.warn(`${r} is changing from ${c?"controlled":"uncontrolled"} to ${s?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),p.current=s},[s,r])}const l=P.useCallback(p=>{var c;if(s){const m=hE(p)?p(e):p;m!==e&&((c=i.current)==null||c.call(i,m))}else o(p)},[s,e,o,i]);return[u,l]}function vE({defaultProp:e,onChange:t}){const[n,r]=P.useState(e),a=P.useRef(n),o=P.useRef(t);return fE(()=>{o.current=t},[t]),P.useEffect(()=>{var i;a.current!==n&&((i=o.current)==null||i.call(o,n),a.current=n)},[n,a]),[n,r,o]}function hE(e){return typeof e=="function"}function yE(e){const t=P.useRef({value:e,previous:e});return P.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}var a_=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),gE="VisuallyHidden",o_=P.forwardRef((e,t)=>b.jsx(Ee.span,{...e,ref:t,style:{...a_,...e.style}}));o_.displayName=gE;var _E=o_,xE=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},Lo=new WeakMap,uc=new WeakMap,lc={},Em=0,i_=function(e){return e&&(e.host||i_(e.parentNode))},wE=function(e,t){return t.map(function(n){if(e.contains(n))return n;var r=i_(n);return r&&e.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},bE=function(e,t,n,r){var a=wE(t,Array.isArray(e)?e:[e]);lc[n]||(lc[n]=new WeakMap);var o=lc[n],i=[],s=new Set,u=new Set(a),l=function(c){!c||s.has(c)||(s.add(c),l(c.parentNode))};a.forEach(l);var p=function(c){!c||u.has(c)||Array.prototype.forEach.call(c.children,function(m){if(s.has(m))p(m);else try{var d=m.getAttribute(r),g=d!==null&&d!=="false",f=(Lo.get(m)||0)+1,y=(o.get(m)||0)+1;Lo.set(m,f),o.set(m,y),i.push(m),f===1&&g&&uc.set(m,!0),y===1&&m.setAttribute(n,"true"),g||m.setAttribute(r,"true")}catch(v){console.error("aria-hidden: cannot operate on ",m,v)}})};return p(t),s.clear(),Em++,function(){i.forEach(function(c){var m=Lo.get(c)-1,d=o.get(c)-1;Lo.set(c,m),o.set(c,d),m||(uc.has(c)||c.removeAttribute(r),uc.delete(c)),d||c.removeAttribute(n)}),Em--,Em||(Lo=new WeakMap,Lo=new WeakMap,uc=new WeakMap,lc={})}},SE=function(e,t,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(e)?e:[e]),a=xE(e);return a?(r.push.apply(r,Array.from(a.querySelectorAll("[aria-live], script"))),bE(r,a,n,"aria-hidden")):function(){return null}},rr=function(){return rr=Object.assign||function(t){for(var n,r=1,a=arguments.length;r"u")return HE;var t=GE(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},FE=c_(),fi="data-scroll-locked",zE=function(e,t,n,r){var a=e.left,o=e.top,i=e.right,s=e.gap;return n===void 0&&(n="margin"),` - .`.concat(OE,` { + */var u7;function xT(){if(u7)return _n;u7=1;var e=Iv(),t=gT();function n(o){for(var s="https://reactjs.org/docs/error-decoder.html?invariant="+o,p=1;p"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),c=Object.prototype.hasOwnProperty,m=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,f={},d={};function v(o){return c.call(d,o)?!0:c.call(f,o)?!1:m.test(o)?d[o]=!0:(f[o]=!0,!1)}function _(o,s,p,h){if(p!==null&&p.type===0)return!1;switch(typeof s){case"function":case"symbol":return!0;case"boolean":return h?!1:p!==null?!p.acceptsBooleans:(o=o.toLowerCase().slice(0,5),o!=="data-"&&o!=="aria-");default:return!1}}function w(o,s,p,h){if(s===null||typeof s>"u"||_(o,s,p,h))return!0;if(h)return!1;if(p!==null)switch(p.type){case 3:return!s;case 4:return s===!1;case 5:return isNaN(s);case 6:return isNaN(s)||1>s}return!1}function g(o,s,p,h,x,S,N){this.acceptsBooleans=s===2||s===3||s===4,this.attributeName=h,this.attributeNamespace=x,this.mustUseProperty=p,this.propertyName=o,this.type=s,this.sanitizeURL=S,this.removeEmptyString=N}var y={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(o){y[o]=new g(o,0,!1,o,null,!1,!1)}),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(o){var s=o[0];y[s]=new g(s,1,!1,o[1],null,!1,!1)}),["contentEditable","draggable","spellCheck","value"].forEach(function(o){y[o]=new g(o,2,!1,o.toLowerCase(),null,!1,!1)}),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(o){y[o]=new g(o,2,!1,o,null,!1,!1)}),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(o){y[o]=new g(o,3,!1,o.toLowerCase(),null,!1,!1)}),["checked","multiple","muted","selected"].forEach(function(o){y[o]=new g(o,3,!0,o,null,!1,!1)}),["capture","download"].forEach(function(o){y[o]=new g(o,4,!1,o,null,!1,!1)}),["cols","rows","size","span"].forEach(function(o){y[o]=new g(o,6,!1,o,null,!1,!1)}),["rowSpan","start"].forEach(function(o){y[o]=new g(o,5,!1,o.toLowerCase(),null,!1,!1)});var b=/[\-:]([a-z])/g;function O(o){return o[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(o){var s=o.replace(b,O);y[s]=new g(s,1,!1,o,null,!1,!1)}),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(o){var s=o.replace(b,O);y[s]=new g(s,1,!1,o,"http://www.w3.org/1999/xlink",!1,!1)}),["xml:base","xml:lang","xml:space"].forEach(function(o){var s=o.replace(b,O);y[s]=new g(s,1,!1,o,"http://www.w3.org/XML/1998/namespace",!1,!1)}),["tabIndex","crossOrigin"].forEach(function(o){y[o]=new g(o,1,!1,o.toLowerCase(),null,!1,!1)}),y.xlinkHref=new g("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach(function(o){y[o]=new g(o,1,!1,o.toLowerCase(),null,!0,!0)});function C(o,s,p,h){var x=y.hasOwnProperty(s)?y[s]:null;(x!==null?x.type!==0:h||!(2I||x[N]!==S[I]){var G=` +`+x[N].replace(" at new "," at ");return o.displayName&&G.includes("")&&(G=G.replace("",o.displayName)),G}while(1<=N&&0<=I);break}}}finally{oe=!1,Error.prepareStackTrace=p}return(o=o?o.displayName||o.name:"")?W(o):""}function ge(o){switch(o.tag){case 5:return W(o.type);case 16:return W("Lazy");case 13:return W("Suspense");case 19:return W("SuspenseList");case 0:case 2:case 15:return o=me(o.type,!1),o;case 11:return o=me(o.type.render,!1),o;case 1:return o=me(o.type,!0),o;default:return""}}function Se(o){if(o==null)return null;if(typeof o=="function")return o.displayName||o.name||null;if(typeof o=="string")return o;switch(o){case T:return"Fragment";case A:return"Portal";case j:return"Profiler";case q:return"StrictMode";case H:return"Suspense";case F:return"SuspenseList"}if(typeof o=="object")switch(o.$$typeof){case $:return(o.displayName||"Context")+".Consumer";case B:return(o._context.displayName||"Context")+".Provider";case M:var s=o.render;return o=o.displayName,o||(o=s.displayName||s.name||"",o=o!==""?"ForwardRef("+o+")":"ForwardRef"),o;case V:return s=o.displayName||null,s!==null?s:Se(o.type)||"Memo";case K:s=o._payload,o=o._init;try{return Se(o(s))}catch{}}return null}function qe(o){var s=o.type;switch(o.tag){case 24:return"Cache";case 9:return(s.displayName||"Context")+".Consumer";case 10:return(s._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return o=s.render,o=o.displayName||o.name||"",s.displayName||(o!==""?"ForwardRef("+o+")":"ForwardRef");case 7:return"Fragment";case 5:return s;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Se(s);case 8:return s===q?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof s=="function")return s.displayName||s.name||null;if(typeof s=="string")return s}return null}function pe(o){switch(typeof o){case"boolean":case"number":case"string":case"undefined":return o;case"object":return o;default:return""}}function ae(o){var s=o.type;return(o=o.nodeName)&&o.toLowerCase()==="input"&&(s==="checkbox"||s==="radio")}function de(o){var s=ae(o)?"checked":"value",p=Object.getOwnPropertyDescriptor(o.constructor.prototype,s),h=""+o[s];if(!o.hasOwnProperty(s)&&typeof p<"u"&&typeof p.get=="function"&&typeof p.set=="function"){var x=p.get,S=p.set;return Object.defineProperty(o,s,{configurable:!0,get:function(){return x.call(this)},set:function(N){h=""+N,S.call(this,N)}}),Object.defineProperty(o,s,{enumerable:p.enumerable}),{getValue:function(){return h},setValue:function(N){h=""+N},stopTracking:function(){o._valueTracker=null,delete o[s]}}}}function fe(o){o._valueTracker||(o._valueTracker=de(o))}function te(o){if(!o)return!1;var s=o._valueTracker;if(!s)return!0;var p=s.getValue(),h="";return o&&(h=ae(o)?o.checked?"true":"false":o.value),o=h,o!==p?(s.setValue(o),!0):!1}function be(o){if(o=o||(typeof document<"u"?document:void 0),typeof o>"u")return null;try{return o.activeElement||o.body}catch{return o.body}}function Ce(o,s){var p=s.checked;return Q({},s,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:p??o._wrapperState.initialChecked})}function Le(o,s){var p=s.defaultValue==null?"":s.defaultValue,h=s.checked!=null?s.checked:s.defaultChecked;p=pe(s.value!=null?s.value:p),o._wrapperState={initialChecked:h,initialValue:p,controlled:s.type==="checkbox"||s.type==="radio"?s.checked!=null:s.value!=null}}function ze(o,s){s=s.checked,s!=null&&C(o,"checked",s,!1)}function ot(o,s){ze(o,s);var p=pe(s.value),h=s.type;if(p!=null)h==="number"?(p===0&&o.value===""||o.value!=p)&&(o.value=""+p):o.value!==""+p&&(o.value=""+p);else if(h==="submit"||h==="reset"){o.removeAttribute("value");return}s.hasOwnProperty("value")?Mn(o,s.type,p):s.hasOwnProperty("defaultValue")&&Mn(o,s.type,pe(s.defaultValue)),s.checked==null&&s.defaultChecked!=null&&(o.defaultChecked=!!s.defaultChecked)}function Gt(o,s,p){if(s.hasOwnProperty("value")||s.hasOwnProperty("defaultValue")){var h=s.type;if(!(h!=="submit"&&h!=="reset"||s.value!==void 0&&s.value!==null))return;s=""+o._wrapperState.initialValue,p||s===o.value||(o.value=s),o.defaultValue=s}p=o.name,p!==""&&(o.name=""),o.defaultChecked=!!o._wrapperState.initialChecked,p!==""&&(o.name=p)}function Mn(o,s,p){(s!=="number"||be(o.ownerDocument)!==o)&&(p==null?o.defaultValue=""+o._wrapperState.initialValue:o.defaultValue!==""+p&&(o.defaultValue=""+p))}var In=Array.isArray;function Xt(o,s,p,h){if(o=o.options,s){s={};for(var x=0;x"+s.valueOf().toString()+"",s=ac.firstChild;o.firstChild;)o.removeChild(o.firstChild);for(;s.firstChild;)o.appendChild(s.firstChild)}});function Zs(o,s){if(s){var p=o.firstChild;if(p&&p===o.lastChild&&p.nodeType===3){p.nodeValue=s;return}}o.textContent=s}var Js={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},hE=["Webkit","ms","Moz","O"];Object.keys(Js).forEach(function(o){hE.forEach(function(s){s=s+o.charAt(0).toUpperCase()+o.substring(1),Js[s]=Js[o]})});function vh(o,s,p){return s==null||typeof s=="boolean"||s===""?"":p||typeof s!="number"||s===0||Js.hasOwnProperty(o)&&Js[o]?(""+s).trim():s+"px"}function hh(o,s){o=o.style;for(var p in s)if(s.hasOwnProperty(p)){var h=p.indexOf("--")===0,x=vh(p,s[p],h);p==="float"&&(p="cssFloat"),h?o.setProperty(p,x):o[p]=x}}var yE=Q({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function z0(o,s){if(s){if(yE[o]&&(s.children!=null||s.dangerouslySetInnerHTML!=null))throw Error(n(137,o));if(s.dangerouslySetInnerHTML!=null){if(s.children!=null)throw Error(n(60));if(typeof s.dangerouslySetInnerHTML!="object"||!("__html"in s.dangerouslySetInnerHTML))throw Error(n(61))}if(s.style!=null&&typeof s.style!="object")throw Error(n(62))}}function U0(o,s){if(o.indexOf("-")===-1)return typeof s.is=="string";switch(o){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var W0=null;function V0(o){return o=o.target||o.srcElement||window,o.correspondingUseElement&&(o=o.correspondingUseElement),o.nodeType===3?o.parentNode:o}var K0=null,ui=null,li=null;function yh(o){if(o=wu(o)){if(typeof K0!="function")throw Error(n(280));var s=o.stateNode;s&&(s=Cc(s),K0(o.stateNode,o.type,s))}}function _h(o){ui?li?li.push(o):li=[o]:ui=o}function gh(){if(ui){var o=ui,s=li;if(li=ui=null,yh(o),s)for(o=0;o>>=0,o===0?32:31-(AE(o)/EE|0)|0}var lc=64,cc=4194304;function ru(o){switch(o&-o){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return o&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return o&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return o}}function pc(o,s){var p=o.pendingLanes;if(p===0)return 0;var h=0,x=o.suspendedLanes,S=o.pingedLanes,N=p&268435455;if(N!==0){var I=N&~x;I!==0?h=ru(I):(S&=N,S!==0&&(h=ru(S)))}else N=p&~x,N!==0?h=ru(N):S!==0&&(h=ru(S));if(h===0)return 0;if(s!==0&&s!==h&&(s&x)===0&&(x=h&-h,S=s&-s,x>=S||x===16&&(S&4194240)!==0))return s;if((h&4)!==0&&(h|=p&16),s=o.entangledLanes,s!==0)for(o=o.entanglements,s&=h;0p;p++)s.push(o);return s}function au(o,s,p){o.pendingLanes|=s,s!==536870912&&(o.suspendedLanes=0,o.pingedLanes=0),o=o.eventTimes,s=31-Zn(s),o[s]=p}function qE(o,s){var p=o.pendingLanes&~s;o.pendingLanes=s,o.suspendedLanes=0,o.pingedLanes=0,o.expiredLanes&=s,o.mutableReadLanes&=s,o.entangledLanes&=s,s=o.entanglements;var h=o.eventTimes;for(o=o.expirationTimes;0=mu),Vh=" ",Kh=!1;function Xh(o,s){switch(o){case"keyup":return sR.indexOf(s.keyCode)!==-1;case"keydown":return s.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Yh(o){return o=o.detail,typeof o=="object"&&"data"in o?o.data:null}var mi=!1;function lR(o,s){switch(o){case"compositionend":return Yh(s);case"keypress":return s.which!==32?null:(Kh=!0,Vh);case"textInput":return o=s.data,o===Vh&&Kh?null:o;default:return null}}function cR(o,s){if(mi)return o==="compositionend"||!mm&&Xh(o,s)?(o=Gh(),hc=im=Pa=null,mi=!1,o):null;switch(o){case"paste":return null;case"keypress":if(!(s.ctrlKey||s.altKey||s.metaKey)||s.ctrlKey&&s.altKey){if(s.char&&1=s)return{node:p,offset:s-o};o=h}e:{for(;p;){if(p.nextSibling){p=p.nextSibling;break e}p=p.parentNode}p=void 0}p=r6(p)}}function o6(o,s){return o&&s?o===s?!0:o&&o.nodeType===3?!1:s&&s.nodeType===3?o6(o,s.parentNode):"contains"in o?o.contains(s):o.compareDocumentPosition?!!(o.compareDocumentPosition(s)&16):!1:!1}function i6(){for(var o=window,s=be();s instanceof o.HTMLIFrameElement;){try{var p=typeof s.contentWindow.location.href=="string"}catch{p=!1}if(p)o=s.contentWindow;else break;s=be(o.document)}return s}function vm(o){var s=o&&o.nodeName&&o.nodeName.toLowerCase();return s&&(s==="input"&&(o.type==="text"||o.type==="search"||o.type==="tel"||o.type==="url"||o.type==="password")||s==="textarea"||o.contentEditable==="true")}function gR(o){var s=i6(),p=o.focusedElem,h=o.selectionRange;if(s!==p&&p&&p.ownerDocument&&o6(p.ownerDocument.documentElement,p)){if(h!==null&&vm(p)){if(s=h.start,o=h.end,o===void 0&&(o=s),"selectionStart"in p)p.selectionStart=s,p.selectionEnd=Math.min(o,p.value.length);else if(o=(s=p.ownerDocument||document)&&s.defaultView||window,o.getSelection){o=o.getSelection();var x=p.textContent.length,S=Math.min(h.start,x);h=h.end===void 0?S:Math.min(h.end,x),!o.extend&&S>h&&(x=h,h=S,S=x),x=a6(p,S);var N=a6(p,h);x&&N&&(o.rangeCount!==1||o.anchorNode!==x.node||o.anchorOffset!==x.offset||o.focusNode!==N.node||o.focusOffset!==N.offset)&&(s=s.createRange(),s.setStart(x.node,x.offset),o.removeAllRanges(),S>h?(o.addRange(s),o.extend(N.node,N.offset)):(s.setEnd(N.node,N.offset),o.addRange(s)))}}for(s=[],o=p;o=o.parentNode;)o.nodeType===1&&s.push({element:o,left:o.scrollLeft,top:o.scrollTop});for(typeof p.focus=="function"&&p.focus(),p=0;p=document.documentMode,di=null,hm=null,hu=null,ym=!1;function s6(o,s,p){var h=p.window===p?p.document:p.nodeType===9?p:p.ownerDocument;ym||di==null||di!==be(h)||(h=di,"selectionStart"in h&&vm(h)?h={start:h.selectionStart,end:h.selectionEnd}:(h=(h.ownerDocument&&h.ownerDocument.defaultView||window).getSelection(),h={anchorNode:h.anchorNode,anchorOffset:h.anchorOffset,focusNode:h.focusNode,focusOffset:h.focusOffset}),hu&&vu(hu,h)||(hu=h,h=Pc(hm,"onSelect"),0_i||(o.current=Em[_i],Em[_i]=null,_i--)}function rt(o,s){_i++,Em[_i]=o.current,o.current=s}var Aa={},Qt=Ca(Aa),dn=Ca(!1),vo=Aa;function gi(o,s){var p=o.type.contextTypes;if(!p)return Aa;var h=o.stateNode;if(h&&h.__reactInternalMemoizedUnmaskedChildContext===s)return h.__reactInternalMemoizedMaskedChildContext;var x={},S;for(S in p)x[S]=s[S];return h&&(o=o.stateNode,o.__reactInternalMemoizedUnmaskedChildContext=s,o.__reactInternalMemoizedMaskedChildContext=x),x}function fn(o){return o=o.childContextTypes,o!=null}function Ac(){st(dn),st(Qt)}function b6(o,s,p){if(Qt.current!==Aa)throw Error(n(168));rt(Qt,s),rt(dn,p)}function S6(o,s,p){var h=o.stateNode;if(s=s.childContextTypes,typeof h.getChildContext!="function")return p;h=h.getChildContext();for(var x in h)if(!(x in s))throw Error(n(108,qe(o)||"Unknown",x));return Q({},p,h)}function Ec(o){return o=(o=o.stateNode)&&o.__reactInternalMemoizedMergedChildContext||Aa,vo=Qt.current,rt(Qt,o),rt(dn,dn.current),!0}function P6(o,s,p){var h=o.stateNode;if(!h)throw Error(n(169));p?(o=S6(o,s,vo),h.__reactInternalMemoizedMergedChildContext=o,st(dn),st(Qt),rt(Qt,o)):st(dn),rt(dn,p)}var zr=null,Rc=!1,Rm=!1;function O6(o){zr===null?zr=[o]:zr.push(o)}function TR(o){Rc=!0,O6(o)}function Ea(){if(!Rm&&zr!==null){Rm=!0;var o=0,s=Qe;try{var p=zr;for(Qe=1;o>=N,x-=N,Ur=1<<32-Zn(s)+x|p<Ae?(It=Oe,Oe=null):It=Oe.sibling;var Ge=ie(X,Oe,Z[Ae],le);if(Ge===null){Oe===null&&(Oe=It);break}o&&Oe&&Ge.alternate===null&&s(X,Oe),U=S(Ge,U,Ae),Pe===null?we=Ge:Pe.sibling=Ge,Pe=Ge,Oe=It}if(Ae===Z.length)return p(X,Oe),ct&&yo(X,Ae),we;if(Oe===null){for(;AeAe?(It=Oe,Oe=null):It=Oe.sibling;var $a=ie(X,Oe,Ge.value,le);if($a===null){Oe===null&&(Oe=It);break}o&&Oe&&$a.alternate===null&&s(X,Oe),U=S($a,U,Ae),Pe===null?we=$a:Pe.sibling=$a,Pe=$a,Oe=It}if(Ge.done)return p(X,Oe),ct&&yo(X,Ae),we;if(Oe===null){for(;!Ge.done;Ae++,Ge=Z.next())Ge=ue(X,Ge.value,le),Ge!==null&&(U=S(Ge,U,Ae),Pe===null?we=Ge:Pe.sibling=Ge,Pe=Ge);return ct&&yo(X,Ae),we}for(Oe=h(X,Oe);!Ge.done;Ae++,Ge=Z.next())Ge=ve(Oe,X,Ae,Ge.value,le),Ge!==null&&(o&&Ge.alternate!==null&&Oe.delete(Ge.key===null?Ae:Ge.key),U=S(Ge,U,Ae),Pe===null?we=Ge:Pe.sibling=Ge,Pe=Ge);return o&&Oe.forEach(function(pT){return s(X,pT)}),ct&&yo(X,Ae),we}function xt(X,U,Z,le){if(typeof Z=="object"&&Z!==null&&Z.type===T&&Z.key===null&&(Z=Z.props.children),typeof Z=="object"&&Z!==null){switch(Z.$$typeof){case P:e:{for(var we=Z.key,Pe=U;Pe!==null;){if(Pe.key===we){if(we=Z.type,we===T){if(Pe.tag===7){p(X,Pe.sibling),U=x(Pe,Z.props.children),U.return=X,X=U;break e}}else if(Pe.elementType===we||typeof we=="object"&&we!==null&&we.$$typeof===K&&T6(we)===Pe.type){p(X,Pe.sibling),U=x(Pe,Z.props),U.ref=bu(X,Pe,Z),U.return=X,X=U;break e}p(X,Pe);break}else s(X,Pe);Pe=Pe.sibling}Z.type===T?(U=Oo(Z.props.children,X.mode,le,Z.key),U.return=X,X=U):(le=ap(Z.type,Z.key,Z.props,null,X.mode,le),le.ref=bu(X,U,Z),le.return=X,X=le)}return N(X);case A:e:{for(Pe=Z.key;U!==null;){if(U.key===Pe)if(U.tag===4&&U.stateNode.containerInfo===Z.containerInfo&&U.stateNode.implementation===Z.implementation){p(X,U.sibling),U=x(U,Z.children||[]),U.return=X,X=U;break e}else{p(X,U);break}else s(X,U);U=U.sibling}U=Cd(Z,X.mode,le),U.return=X,X=U}return N(X);case K:return Pe=Z._init,xt(X,U,Pe(Z._payload),le)}if(In(Z))return _e(X,U,Z,le);if(Y(Z))return xe(X,U,Z,le);jc(X,Z)}return typeof Z=="string"&&Z!==""||typeof Z=="number"?(Z=""+Z,U!==null&&U.tag===6?(p(X,U.sibling),U=x(U,Z),U.return=X,X=U):(p(X,U),U=kd(Z,X.mode,le),U.return=X,X=U),N(X)):p(X,U)}return xt}var Si=N6(!0),q6=N6(!1),Mc=Ca(null),Ic=null,Pi=null,Im=null;function Dm(){Im=Pi=Ic=null}function $m(o){var s=Mc.current;st(Mc),o._currentValue=s}function Lm(o,s,p){for(;o!==null;){var h=o.alternate;if((o.childLanes&s)!==s?(o.childLanes|=s,h!==null&&(h.childLanes|=s)):h!==null&&(h.childLanes&s)!==s&&(h.childLanes|=s),o===p)break;o=o.return}}function Oi(o,s){Ic=o,Im=Pi=null,o=o.dependencies,o!==null&&o.firstContext!==null&&((o.lanes&s)!==0&&(vn=!0),o.firstContext=null)}function Ln(o){var s=o._currentValue;if(Im!==o)if(o={context:o,memoizedValue:s,next:null},Pi===null){if(Ic===null)throw Error(n(308));Pi=o,Ic.dependencies={lanes:0,firstContext:o}}else Pi=Pi.next=o;return s}var _o=null;function Hm(o){_o===null?_o=[o]:_o.push(o)}function j6(o,s,p,h){var x=s.interleaved;return x===null?(p.next=p,Hm(s)):(p.next=x.next,x.next=p),s.interleaved=p,Vr(o,h)}function Vr(o,s){o.lanes|=s;var p=o.alternate;for(p!==null&&(p.lanes|=s),p=o,o=o.return;o!==null;)o.childLanes|=s,p=o.alternate,p!==null&&(p.childLanes|=s),p=o,o=o.return;return p.tag===3?p.stateNode:null}var Ra=!1;function Gm(o){o.updateQueue={baseState:o.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function M6(o,s){o=o.updateQueue,s.updateQueue===o&&(s.updateQueue={baseState:o.baseState,firstBaseUpdate:o.firstBaseUpdate,lastBaseUpdate:o.lastBaseUpdate,shared:o.shared,effects:o.effects})}function Kr(o,s){return{eventTime:o,lane:s,tag:0,payload:null,callback:null,next:null}}function Ta(o,s,p){var h=o.updateQueue;if(h===null)return null;if(h=h.shared,(He&2)!==0){var x=h.pending;return x===null?s.next=s:(s.next=x.next,x.next=s),h.pending=s,Vr(o,p)}return x=h.interleaved,x===null?(s.next=s,Hm(h)):(s.next=x.next,x.next=s),h.interleaved=s,Vr(o,p)}function Dc(o,s,p){if(s=s.updateQueue,s!==null&&(s=s.shared,(p&4194240)!==0)){var h=s.lanes;h&=o.pendingLanes,p|=h,s.lanes=p,tm(o,p)}}function I6(o,s){var p=o.updateQueue,h=o.alternate;if(h!==null&&(h=h.updateQueue,p===h)){var x=null,S=null;if(p=p.firstBaseUpdate,p!==null){do{var N={eventTime:p.eventTime,lane:p.lane,tag:p.tag,payload:p.payload,callback:p.callback,next:null};S===null?x=S=N:S=S.next=N,p=p.next}while(p!==null);S===null?x=S=s:S=S.next=s}else x=S=s;p={baseState:h.baseState,firstBaseUpdate:x,lastBaseUpdate:S,shared:h.shared,effects:h.effects},o.updateQueue=p;return}o=p.lastBaseUpdate,o===null?p.firstBaseUpdate=s:o.next=s,p.lastBaseUpdate=s}function $c(o,s,p,h){var x=o.updateQueue;Ra=!1;var S=x.firstBaseUpdate,N=x.lastBaseUpdate,I=x.shared.pending;if(I!==null){x.shared.pending=null;var G=I,ee=G.next;G.next=null,N===null?S=ee:N.next=ee,N=G;var se=o.alternate;se!==null&&(se=se.updateQueue,I=se.lastBaseUpdate,I!==N&&(I===null?se.firstBaseUpdate=ee:I.next=ee,se.lastBaseUpdate=G))}if(S!==null){var ue=x.baseState;N=0,se=ee=G=null,I=S;do{var ie=I.lane,ve=I.eventTime;if((h&ie)===ie){se!==null&&(se=se.next={eventTime:ve,lane:0,tag:I.tag,payload:I.payload,callback:I.callback,next:null});e:{var _e=o,xe=I;switch(ie=s,ve=p,xe.tag){case 1:if(_e=xe.payload,typeof _e=="function"){ue=_e.call(ve,ue,ie);break e}ue=_e;break e;case 3:_e.flags=_e.flags&-65537|128;case 0:if(_e=xe.payload,ie=typeof _e=="function"?_e.call(ve,ue,ie):_e,ie==null)break e;ue=Q({},ue,ie);break e;case 2:Ra=!0}}I.callback!==null&&I.lane!==0&&(o.flags|=64,ie=x.effects,ie===null?x.effects=[I]:ie.push(I))}else ve={eventTime:ve,lane:ie,tag:I.tag,payload:I.payload,callback:I.callback,next:null},se===null?(ee=se=ve,G=ue):se=se.next=ve,N|=ie;if(I=I.next,I===null){if(I=x.shared.pending,I===null)break;ie=I,I=ie.next,ie.next=null,x.lastBaseUpdate=ie,x.shared.pending=null}}while(!0);if(se===null&&(G=ue),x.baseState=G,x.firstBaseUpdate=ee,x.lastBaseUpdate=se,s=x.shared.interleaved,s!==null){x=s;do N|=x.lane,x=x.next;while(x!==s)}else S===null&&(x.shared.lanes=0);wo|=N,o.lanes=N,o.memoizedState=ue}}function D6(o,s,p){if(o=s.effects,s.effects=null,o!==null)for(s=0;sp?p:4,o(!0);var h=Wm.transition;Wm.transition={};try{o(!1),s()}finally{Qe=p,Wm.transition=h}}function ny(){return Hn().memoizedState}function MR(o,s,p){var h=Ma(o);if(p={lane:h,action:p,hasEagerState:!1,eagerState:null,next:null},ry(o))ay(s,p);else if(p=j6(o,s,p,h),p!==null){var x=ln();ar(p,o,h,x),oy(p,s,h)}}function IR(o,s,p){var h=Ma(o),x={lane:h,action:p,hasEagerState:!1,eagerState:null,next:null};if(ry(o))ay(s,x);else{var S=o.alternate;if(o.lanes===0&&(S===null||S.lanes===0)&&(S=s.lastRenderedReducer,S!==null))try{var N=s.lastRenderedState,I=S(N,p);if(x.hasEagerState=!0,x.eagerState=I,Jn(I,N)){var G=s.interleaved;G===null?(x.next=x,Hm(s)):(x.next=G.next,G.next=x),s.interleaved=x;return}}catch{}finally{}p=j6(o,s,x,h),p!==null&&(x=ln(),ar(p,o,h,x),oy(p,s,h))}}function ry(o){var s=o.alternate;return o===ft||s!==null&&s===ft}function ay(o,s){ku=Gc=!0;var p=o.pending;p===null?s.next=s:(s.next=p.next,p.next=s),o.pending=s}function oy(o,s,p){if((p&4194240)!==0){var h=s.lanes;h&=o.pendingLanes,p|=h,s.lanes=p,tm(o,p)}}var zc={readContext:Ln,useCallback:Zt,useContext:Zt,useEffect:Zt,useImperativeHandle:Zt,useInsertionEffect:Zt,useLayoutEffect:Zt,useMemo:Zt,useReducer:Zt,useRef:Zt,useState:Zt,useDebugValue:Zt,useDeferredValue:Zt,useTransition:Zt,useMutableSource:Zt,useSyncExternalStore:Zt,useId:Zt,unstable_isNewReconciler:!1},DR={readContext:Ln,useCallback:function(o,s){return br().memoizedState=[o,s===void 0?null:s],o},useContext:Ln,useEffect:K6,useImperativeHandle:function(o,s,p){return p=p!=null?p.concat([o]):null,Fc(4194308,4,Q6.bind(null,s,o),p)},useLayoutEffect:function(o,s){return Fc(4194308,4,o,s)},useInsertionEffect:function(o,s){return Fc(4,2,o,s)},useMemo:function(o,s){var p=br();return s=s===void 0?null:s,o=o(),p.memoizedState=[o,s],o},useReducer:function(o,s,p){var h=br();return s=p!==void 0?p(s):s,h.memoizedState=h.baseState=s,o={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:o,lastRenderedState:s},h.queue=o,o=o.dispatch=MR.bind(null,ft,o),[h.memoizedState,o]},useRef:function(o){var s=br();return o={current:o},s.memoizedState=o},useState:W6,useDebugValue:Jm,useDeferredValue:function(o){return br().memoizedState=o},useTransition:function(){var o=W6(!1),s=o[0];return o=jR.bind(null,o[1]),br().memoizedState=o,[s,o]},useMutableSource:function(){},useSyncExternalStore:function(o,s,p){var h=ft,x=br();if(ct){if(p===void 0)throw Error(n(407));p=p()}else{if(p=s(),Mt===null)throw Error(n(349));(xo&30)!==0||G6(h,s,p)}x.memoizedState=p;var S={value:p,getSnapshot:s};return x.queue=S,K6(B6.bind(null,h,S,o),[o]),h.flags|=2048,Eu(9,F6.bind(null,h,S,p,s),void 0,null),p},useId:function(){var o=br(),s=Mt.identifierPrefix;if(ct){var p=Wr,h=Ur;p=(h&~(1<<32-Zn(h)-1)).toString(32)+p,s=":"+s+"R"+p,p=Cu++,0<\/script>",o=o.removeChild(o.firstChild)):typeof h.is=="string"?o=N.createElement(p,{is:h.is}):(o=N.createElement(p),p==="select"&&(N=o,h.multiple?N.multiple=!0:h.size&&(N.size=h.size))):o=N.createElementNS(o,p),o[xr]=s,o[xu]=h,Oy(o,s,!1,!1),s.stateNode=o;e:{switch(N=U0(p,h),p){case"dialog":it("cancel",o),it("close",o),x=h;break;case"iframe":case"object":case"embed":it("load",o),x=h;break;case"video":case"audio":for(x=0;xRi&&(s.flags|=128,h=!0,Ru(S,!1),s.lanes=4194304)}else{if(!h)if(o=Lc(N),o!==null){if(s.flags|=128,h=!0,p=o.updateQueue,p!==null&&(s.updateQueue=p,s.flags|=4),Ru(S,!0),S.tail===null&&S.tailMode==="hidden"&&!N.alternate&&!ct)return Jt(s),null}else 2*gt()-S.renderingStartTime>Ri&&p!==1073741824&&(s.flags|=128,h=!0,Ru(S,!1),s.lanes=4194304);S.isBackwards?(N.sibling=s.child,s.child=N):(p=S.last,p!==null?p.sibling=N:s.child=N,S.last=N)}return S.tail!==null?(s=S.tail,S.rendering=s,S.tail=s.sibling,S.renderingStartTime=gt(),s.sibling=null,p=dt.current,rt(dt,h?p&1|2:p&1),s):(Jt(s),null);case 22:case 23:return Sd(),h=s.memoizedState!==null,o!==null&&o.memoizedState!==null!==h&&(s.flags|=8192),h&&(s.mode&1)!==0?(An&1073741824)!==0&&(Jt(s),s.subtreeFlags&6&&(s.flags|=8192)):Jt(s),null;case 24:return null;case 25:return null}throw Error(n(156,s.tag))}function UR(o,s){switch(Nm(s),s.tag){case 1:return fn(s.type)&&Ac(),o=s.flags,o&65536?(s.flags=o&-65537|128,s):null;case 3:return ki(),st(dn),st(Qt),Um(),o=s.flags,(o&65536)!==0&&(o&128)===0?(s.flags=o&-65537|128,s):null;case 5:return Bm(s),null;case 13:if(st(dt),o=s.memoizedState,o!==null&&o.dehydrated!==null){if(s.alternate===null)throw Error(n(340));bi()}return o=s.flags,o&65536?(s.flags=o&-65537|128,s):null;case 19:return st(dt),null;case 4:return ki(),null;case 10:return $m(s.type._context),null;case 22:case 23:return Sd(),null;case 24:return null;default:return null}}var Kc=!1,en=!1,WR=typeof WeakSet=="function"?WeakSet:Set,he=null;function Ai(o,s){var p=o.ref;if(p!==null)if(typeof p=="function")try{p(null)}catch(h){vt(o,s,h)}else p.current=null}function pd(o,s,p){try{p()}catch(h){vt(o,s,h)}}var Ay=!1;function VR(o,s){if(Sm=fc,o=i6(),vm(o)){if("selectionStart"in o)var p={start:o.selectionStart,end:o.selectionEnd};else e:{p=(p=o.ownerDocument)&&p.defaultView||window;var h=p.getSelection&&p.getSelection();if(h&&h.rangeCount!==0){p=h.anchorNode;var x=h.anchorOffset,S=h.focusNode;h=h.focusOffset;try{p.nodeType,S.nodeType}catch{p=null;break e}var N=0,I=-1,G=-1,ee=0,se=0,ue=o,ie=null;t:for(;;){for(var ve;ue!==p||x!==0&&ue.nodeType!==3||(I=N+x),ue!==S||h!==0&&ue.nodeType!==3||(G=N+h),ue.nodeType===3&&(N+=ue.nodeValue.length),(ve=ue.firstChild)!==null;)ie=ue,ue=ve;for(;;){if(ue===o)break t;if(ie===p&&++ee===x&&(I=N),ie===S&&++se===h&&(G=N),(ve=ue.nextSibling)!==null)break;ue=ie,ie=ue.parentNode}ue=ve}p=I===-1||G===-1?null:{start:I,end:G}}else p=null}p=p||{start:0,end:0}}else p=null;for(Pm={focusedElem:o,selectionRange:p},fc=!1,he=s;he!==null;)if(s=he,o=s.child,(s.subtreeFlags&1028)!==0&&o!==null)o.return=s,he=o;else for(;he!==null;){s=he;try{var _e=s.alternate;if((s.flags&1024)!==0)switch(s.tag){case 0:case 11:case 15:break;case 1:if(_e!==null){var xe=_e.memoizedProps,xt=_e.memoizedState,X=s.stateNode,U=X.getSnapshotBeforeUpdate(s.elementType===s.type?xe:tr(s.type,xe),xt);X.__reactInternalSnapshotBeforeUpdate=U}break;case 3:var Z=s.stateNode.containerInfo;Z.nodeType===1?Z.textContent="":Z.nodeType===9&&Z.documentElement&&Z.removeChild(Z.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(n(163))}}catch(le){vt(s,s.return,le)}if(o=s.sibling,o!==null){o.return=s.return,he=o;break}he=s.return}return _e=Ay,Ay=!1,_e}function Tu(o,s,p){var h=s.updateQueue;if(h=h!==null?h.lastEffect:null,h!==null){var x=h=h.next;do{if((x.tag&o)===o){var S=x.destroy;x.destroy=void 0,S!==void 0&&pd(s,p,S)}x=x.next}while(x!==h)}}function Xc(o,s){if(s=s.updateQueue,s=s!==null?s.lastEffect:null,s!==null){var p=s=s.next;do{if((p.tag&o)===o){var h=p.create;p.destroy=h()}p=p.next}while(p!==s)}}function md(o){var s=o.ref;if(s!==null){var p=o.stateNode;switch(o.tag){case 5:o=p;break;default:o=p}typeof s=="function"?s(o):s.current=o}}function Ey(o){var s=o.alternate;s!==null&&(o.alternate=null,Ey(s)),o.child=null,o.deletions=null,o.sibling=null,o.tag===5&&(s=o.stateNode,s!==null&&(delete s[xr],delete s[xu],delete s[Am],delete s[ER],delete s[RR])),o.stateNode=null,o.return=null,o.dependencies=null,o.memoizedProps=null,o.memoizedState=null,o.pendingProps=null,o.stateNode=null,o.updateQueue=null}function Ry(o){return o.tag===5||o.tag===3||o.tag===4}function Ty(o){e:for(;;){for(;o.sibling===null;){if(o.return===null||Ry(o.return))return null;o=o.return}for(o.sibling.return=o.return,o=o.sibling;o.tag!==5&&o.tag!==6&&o.tag!==18;){if(o.flags&2||o.child===null||o.tag===4)continue e;o.child.return=o,o=o.child}if(!(o.flags&2))return o.stateNode}}function dd(o,s,p){var h=o.tag;if(h===5||h===6)o=o.stateNode,s?p.nodeType===8?p.parentNode.insertBefore(o,s):p.insertBefore(o,s):(p.nodeType===8?(s=p.parentNode,s.insertBefore(o,p)):(s=p,s.appendChild(o)),p=p._reactRootContainer,p!=null||s.onclick!==null||(s.onclick=kc));else if(h!==4&&(o=o.child,o!==null))for(dd(o,s,p),o=o.sibling;o!==null;)dd(o,s,p),o=o.sibling}function fd(o,s,p){var h=o.tag;if(h===5||h===6)o=o.stateNode,s?p.insertBefore(o,s):p.appendChild(o);else if(h!==4&&(o=o.child,o!==null))for(fd(o,s,p),o=o.sibling;o!==null;)fd(o,s,p),o=o.sibling}var Ft=null,nr=!1;function Na(o,s,p){for(p=p.child;p!==null;)Ny(o,s,p),p=p.sibling}function Ny(o,s,p){if(gr&&typeof gr.onCommitFiberUnmount=="function")try{gr.onCommitFiberUnmount(uc,p)}catch{}switch(p.tag){case 5:en||Ai(p,s);case 6:var h=Ft,x=nr;Ft=null,Na(o,s,p),Ft=h,nr=x,Ft!==null&&(nr?(o=Ft,p=p.stateNode,o.nodeType===8?o.parentNode.removeChild(p):o.removeChild(p)):Ft.removeChild(p.stateNode));break;case 18:Ft!==null&&(nr?(o=Ft,p=p.stateNode,o.nodeType===8?Cm(o.parentNode,p):o.nodeType===1&&Cm(o,p),lu(o)):Cm(Ft,p.stateNode));break;case 4:h=Ft,x=nr,Ft=p.stateNode.containerInfo,nr=!0,Na(o,s,p),Ft=h,nr=x;break;case 0:case 11:case 14:case 15:if(!en&&(h=p.updateQueue,h!==null&&(h=h.lastEffect,h!==null))){x=h=h.next;do{var S=x,N=S.destroy;S=S.tag,N!==void 0&&((S&2)!==0||(S&4)!==0)&&pd(p,s,N),x=x.next}while(x!==h)}Na(o,s,p);break;case 1:if(!en&&(Ai(p,s),h=p.stateNode,typeof h.componentWillUnmount=="function"))try{h.props=p.memoizedProps,h.state=p.memoizedState,h.componentWillUnmount()}catch(I){vt(p,s,I)}Na(o,s,p);break;case 21:Na(o,s,p);break;case 22:p.mode&1?(en=(h=en)||p.memoizedState!==null,Na(o,s,p),en=h):Na(o,s,p);break;default:Na(o,s,p)}}function qy(o){var s=o.updateQueue;if(s!==null){o.updateQueue=null;var p=o.stateNode;p===null&&(p=o.stateNode=new WR),s.forEach(function(h){var x=nT.bind(null,o,h);p.has(h)||(p.add(h),h.then(x,x))})}}function rr(o,s){var p=s.deletions;if(p!==null)for(var h=0;hx&&(x=N),h&=~S}if(h=x,h=gt()-h,h=(120>h?120:480>h?480:1080>h?1080:1920>h?1920:3e3>h?3e3:4320>h?4320:1960*XR(h/1960))-h,10o?16:o,ja===null)var h=!1;else{if(o=ja,ja=null,ep=0,(He&6)!==0)throw Error(n(331));var x=He;for(He|=4,he=o.current;he!==null;){var S=he,N=S.child;if((he.flags&16)!==0){var I=S.deletions;if(I!==null){for(var G=0;Ggt()-yd?So(o,0):hd|=p),yn(o,s)}function Wy(o,s){s===0&&((o.mode&1)===0?s=1:(s=cc,cc<<=1,(cc&130023424)===0&&(cc=4194304)));var p=ln();o=Vr(o,s),o!==null&&(au(o,s,p),yn(o,p))}function tT(o){var s=o.memoizedState,p=0;s!==null&&(p=s.retryLane),Wy(o,p)}function nT(o,s){var p=0;switch(o.tag){case 13:var h=o.stateNode,x=o.memoizedState;x!==null&&(p=x.retryLane);break;case 19:h=o.stateNode;break;default:throw Error(n(314))}h!==null&&h.delete(s),Wy(o,p)}var Vy;Vy=function(o,s,p){if(o!==null)if(o.memoizedProps!==s.pendingProps||dn.current)vn=!0;else{if((o.lanes&p)===0&&(s.flags&128)===0)return vn=!1,BR(o,s,p);vn=(o.flags&131072)!==0}else vn=!1,ct&&(s.flags&1048576)!==0&&k6(s,Nc,s.index);switch(s.lanes=0,s.tag){case 2:var h=s.type;Vc(o,s),o=s.pendingProps;var x=gi(s,Qt.current);Oi(s,p),x=Km(null,s,h,o,x,p);var S=Xm();return s.flags|=1,typeof x=="object"&&x!==null&&typeof x.render=="function"&&x.$$typeof===void 0?(s.tag=1,s.memoizedState=null,s.updateQueue=null,fn(h)?(S=!0,Ec(s)):S=!1,s.memoizedState=x.state!==null&&x.state!==void 0?x.state:null,Gm(s),x.updater=Uc,s.stateNode=x,x._reactInternals=s,td(s,h,o,p),s=od(null,s,h,!0,S,p)):(s.tag=0,ct&&S&&Tm(s),un(null,s,x,p),s=s.child),s;case 16:h=s.elementType;e:{switch(Vc(o,s),o=s.pendingProps,x=h._init,h=x(h._payload),s.type=h,x=s.tag=aT(h),o=tr(h,o),x){case 0:s=ad(null,s,h,o,p);break e;case 1:s=gy(null,s,h,o,p);break e;case 11:s=fy(null,s,h,o,p);break e;case 14:s=vy(null,s,h,tr(h.type,o),p);break e}throw Error(n(306,h,""))}return s;case 0:return h=s.type,x=s.pendingProps,x=s.elementType===h?x:tr(h,x),ad(o,s,h,x,p);case 1:return h=s.type,x=s.pendingProps,x=s.elementType===h?x:tr(h,x),gy(o,s,h,x,p);case 3:e:{if(xy(s),o===null)throw Error(n(387));h=s.pendingProps,S=s.memoizedState,x=S.element,M6(o,s),$c(s,h,null,p);var N=s.memoizedState;if(h=N.element,S.isDehydrated)if(S={element:h,isDehydrated:!1,cache:N.cache,pendingSuspenseBoundaries:N.pendingSuspenseBoundaries,transitions:N.transitions},s.updateQueue.baseState=S,s.memoizedState=S,s.flags&256){x=Ci(Error(n(423)),s),s=wy(o,s,h,p,x);break e}else if(h!==x){x=Ci(Error(n(424)),s),s=wy(o,s,h,p,x);break e}else for(Cn=ka(s.stateNode.containerInfo.firstChild),kn=s,ct=!0,er=null,p=q6(s,null,h,p),s.child=p;p;)p.flags=p.flags&-3|4096,p=p.sibling;else{if(bi(),h===x){s=Xr(o,s,p);break e}un(o,s,h,p)}s=s.child}return s;case 5:return $6(s),o===null&&jm(s),h=s.type,x=s.pendingProps,S=o!==null?o.memoizedProps:null,N=x.children,Om(h,x)?N=null:S!==null&&Om(h,S)&&(s.flags|=32),_y(o,s),un(o,s,N,p),s.child;case 6:return o===null&&jm(s),null;case 13:return by(o,s,p);case 4:return Fm(s,s.stateNode.containerInfo),h=s.pendingProps,o===null?s.child=Si(s,null,h,p):un(o,s,h,p),s.child;case 11:return h=s.type,x=s.pendingProps,x=s.elementType===h?x:tr(h,x),fy(o,s,h,x,p);case 7:return un(o,s,s.pendingProps,p),s.child;case 8:return un(o,s,s.pendingProps.children,p),s.child;case 12:return un(o,s,s.pendingProps.children,p),s.child;case 10:e:{if(h=s.type._context,x=s.pendingProps,S=s.memoizedProps,N=x.value,rt(Mc,h._currentValue),h._currentValue=N,S!==null)if(Jn(S.value,N)){if(S.children===x.children&&!dn.current){s=Xr(o,s,p);break e}}else for(S=s.child,S!==null&&(S.return=s);S!==null;){var I=S.dependencies;if(I!==null){N=S.child;for(var G=I.firstContext;G!==null;){if(G.context===h){if(S.tag===1){G=Kr(-1,p&-p),G.tag=2;var ee=S.updateQueue;if(ee!==null){ee=ee.shared;var se=ee.pending;se===null?G.next=G:(G.next=se.next,se.next=G),ee.pending=G}}S.lanes|=p,G=S.alternate,G!==null&&(G.lanes|=p),Lm(S.return,p,s),I.lanes|=p;break}G=G.next}}else if(S.tag===10)N=S.type===s.type?null:S.child;else if(S.tag===18){if(N=S.return,N===null)throw Error(n(341));N.lanes|=p,I=N.alternate,I!==null&&(I.lanes|=p),Lm(N,p,s),N=S.sibling}else N=S.child;if(N!==null)N.return=S;else for(N=S;N!==null;){if(N===s){N=null;break}if(S=N.sibling,S!==null){S.return=N.return,N=S;break}N=N.return}S=N}un(o,s,x.children,p),s=s.child}return s;case 9:return x=s.type,h=s.pendingProps.children,Oi(s,p),x=Ln(x),h=h(x),s.flags|=1,un(o,s,h,p),s.child;case 14:return h=s.type,x=tr(h,s.pendingProps),x=tr(h.type,x),vy(o,s,h,x,p);case 15:return hy(o,s,s.type,s.pendingProps,p);case 17:return h=s.type,x=s.pendingProps,x=s.elementType===h?x:tr(h,x),Vc(o,s),s.tag=1,fn(h)?(o=!0,Ec(s)):o=!1,Oi(s,p),sy(s,h,x),td(s,h,x,p),od(null,s,h,!0,o,p);case 19:return Py(o,s,p);case 22:return yy(o,s,p)}throw Error(n(156,s.tag))};function Ky(o,s){return Ch(o,s)}function rT(o,s,p,h){this.tag=o,this.key=p,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=s,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=h,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Fn(o,s,p,h){return new rT(o,s,p,h)}function Od(o){return o=o.prototype,!(!o||!o.isReactComponent)}function aT(o){if(typeof o=="function")return Od(o)?1:0;if(o!=null){if(o=o.$$typeof,o===M)return 11;if(o===V)return 14}return 2}function Da(o,s){var p=o.alternate;return p===null?(p=Fn(o.tag,s,o.key,o.mode),p.elementType=o.elementType,p.type=o.type,p.stateNode=o.stateNode,p.alternate=o,o.alternate=p):(p.pendingProps=s,p.type=o.type,p.flags=0,p.subtreeFlags=0,p.deletions=null),p.flags=o.flags&14680064,p.childLanes=o.childLanes,p.lanes=o.lanes,p.child=o.child,p.memoizedProps=o.memoizedProps,p.memoizedState=o.memoizedState,p.updateQueue=o.updateQueue,s=o.dependencies,p.dependencies=s===null?null:{lanes:s.lanes,firstContext:s.firstContext},p.sibling=o.sibling,p.index=o.index,p.ref=o.ref,p}function ap(o,s,p,h,x,S){var N=2;if(h=o,typeof o=="function")Od(o)&&(N=1);else if(typeof o=="string")N=5;else e:switch(o){case T:return Oo(p.children,x,S,s);case q:N=8,x|=8;break;case j:return o=Fn(12,p,s,x|2),o.elementType=j,o.lanes=S,o;case H:return o=Fn(13,p,s,x),o.elementType=H,o.lanes=S,o;case F:return o=Fn(19,p,s,x),o.elementType=F,o.lanes=S,o;case J:return op(p,x,S,s);default:if(typeof o=="object"&&o!==null)switch(o.$$typeof){case B:N=10;break e;case $:N=9;break e;case M:N=11;break e;case V:N=14;break e;case K:N=16,h=null;break e}throw Error(n(130,o==null?o:typeof o,""))}return s=Fn(N,p,s,x),s.elementType=o,s.type=h,s.lanes=S,s}function Oo(o,s,p,h){return o=Fn(7,o,h,s),o.lanes=p,o}function op(o,s,p,h){return o=Fn(22,o,h,s),o.elementType=J,o.lanes=p,o.stateNode={isHidden:!1},o}function kd(o,s,p){return o=Fn(6,o,null,s),o.lanes=p,o}function Cd(o,s,p){return s=Fn(4,o.children!==null?o.children:[],o.key,s),s.lanes=p,s.stateNode={containerInfo:o.containerInfo,pendingChildren:null,implementation:o.implementation},s}function oT(o,s,p,h,x){this.tag=s,this.containerInfo=o,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=em(0),this.expirationTimes=em(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=em(0),this.identifierPrefix=h,this.onRecoverableError=x,this.mutableSourceEagerHydrationData=null}function Ad(o,s,p,h,x,S,N,I,G){return o=new oT(o,s,p,I,G),s===1?(s=1,S===!0&&(s|=8)):s=0,S=Fn(3,null,null,s),o.current=S,S.stateNode=o,S.memoizedState={element:h,isDehydrated:p,cache:null,transitions:null,pendingSuspenseBoundaries:null},Gm(S),o}function iT(o,s,p){var h=3"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),Md.exports=xT(),Md.exports}var c7;function wT(){if(c7)return fp;c7=1;var e=KS();return fp.createRoot=e.createRoot,fp.hydrateRoot=e.hydrateRoot,fp}var bT=wT();const XS=tt(bT);var Xl=KS();function p7(e,[t,n]){return Math.min(n,Math.max(t,e))}var ST=Object.defineProperty,Ms=(e,t)=>ST(e,"name",{value:t,configurable:!0}),YS=!!(typeof window<"u"&&window.document&&window.document.createElement);function Ve(e,t,{checkForDefaultPrevented:n=!0}={}){return Ms(function(a){if(e==null||e(a),n===!1||!a||!a.defaultPrevented)return t==null?void 0:t(a)},"handleEvent")}Ms(Ve,"composeEventHandlers");function PT(e){var t;if(!YS)throw new Error("Cannot access window outside of the DOM");return((t=e==null?void 0:e.ownerDocument)==null?void 0:t.defaultView)??window}Ms(PT,"getOwnerWindow");function Q9(e){if(!YS)throw new Error("Cannot access document outside of the DOM");return(e==null?void 0:e.ownerDocument)??document}Ms(Q9,"getOwnerDocument");function QS(e,t=!1){const{activeElement:n}=Q9(e);if(!(n!=null&&n.nodeName))return null;if(ZS(n)&&n.contentDocument)return QS(n.contentDocument.body,t);if(t){const r=n.getAttribute("aria-activedescendant");if(r){const a=Q9(n).getElementById(r);if(a)return a}}return n}Ms(QS,"getActiveElement");function ZS(e){return e.tagName==="IFRAME"}Ms(ZS,"isFrame");function Is(e,t=[]){let n=[];function r(i,u){const l=R.createContext(u);l.displayName=i+"Context";const c=n.length;n=[...n,u];const m=d=>{var b;const{scope:v,children:_,...w}=d,g=((b=v==null?void 0:v[e])==null?void 0:b[c])||l,y=R.useMemo(()=>w,Object.values(w));return E.jsx(g.Provider,{value:y,children:_})};m.displayName=i+"Provider";function f(d,v,_={}){var b;const{optional:w=!1}=_,g=((b=v==null?void 0:v[e])==null?void 0:b[c])||l,y=R.useContext(g);if(y)return y;if(u!==void 0)return u;if(!w)throw new Error(`\`${d}\` must be used within \`${i}\``)}return[m,f]}const a=()=>{const i=n.map(u=>R.createContext(u));return function(l){const c=(l==null?void 0:l[e])||i;return R.useMemo(()=>({[`__scope${e}`]:{...l,[e]:c}}),[l,c])}};return a.scopeName=e,[r,OT(a,...t)]}function OT(...e){const t=e[0];if(e.length===1)return t;const n=()=>{const r=e.map(a=>({useScope:a(),scopeName:a.scopeName}));return function(i){const u=r.reduce((l,{useScope:c,scopeName:m})=>{const d=c(i)[`__scope${m}`];return{...l,...d}},{});return R.useMemo(()=>({[`__scope${t.scopeName}`]:u}),[u])}};return n.scopeName=t.scopeName,n}function m7(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function kT(...e){return t=>{let n=!1;const r=e.map(a=>{const i=m7(a,t);return!n&&typeof i=="function"&&(n=!0),i});if(n)return()=>{for(let a=0;a{let{children:a,...i}=n,u=null,l=!1;const c=[];d7(a)&&typeof vp=="function"&&(a=vp(a._payload)),R.Children.forEach(a,v=>{var _;if(NT(v)){l=!0;const w=v;let g="child"in w.props?w.props.child:w.props.children;d7(g)&&typeof vp=="function"&&(g=vp(g._payload)),u=ET(w,g),c.push((_=u==null?void 0:u.props)==null?void 0:_.children)}else c.push(v)}),u?u=R.cloneElement(u,void 0,c):!l&&R.Children.count(a)===1&&R.isValidElement(a)&&(u=a);const m=u?TT(u):void 0,f=Nt(r,m);if(!u){if(a||a===0)throw new Error(l?IT(e):MT(e));return a}const d=RT(i,u.props??{});return u.type!==R.Fragment&&(d.ref=r?f:m),R.cloneElement(u,d)});return t.displayName=`${e}.Slot`,t}var CT=al("Slot"),JS=Symbol.for("radix.slottable");function AT(e){const t=n=>"child"in n?n.children(n.child):n.children;return t.displayName=`${e}.Slottable`,t.__radixId=JS,t}var ET=(e,t)=>{if("child"in e.props){const n=e.props.child;return R.isValidElement(n)?R.cloneElement(n,void 0,e.props.children(n.props.children)):null}return R.isValidElement(t)?t:null};function RT(e,t){const n={...t};for(const r in t){const a=e[r],i=t[r];/^on[A-Z]/.test(r)?a&&i?n[r]=(...l)=>{const c=i(...l);return a(...l),c}:a&&(n[r]=a):r==="style"?n[r]={...a,...i}:r==="className"&&(n[r]=[a,i].filter(Boolean).join(" "))}return{...e,...n}}function TT(e){var r,a;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(a=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:a.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}function NT(e){return R.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===JS}var qT=Symbol.for("react.lazy");function d7(e){return e!=null&&typeof e=="object"&&"$$typeof"in e&&e.$$typeof===qT&&"_payload"in e&&jT(e._payload)}function jT(e){return typeof e=="object"&&e!==null&&"then"in e}var MT=e=>`${e} failed to slot onto its children. Expected a single React element child or \`Slottable\`.`,IT=e=>`${e} failed to slot onto its \`Slottable\`. Expected \`Slottable\` to receive a single React element child.`,vp=js[" use ".trim().toString()];function eP(e){const t=e+"CollectionProvider",[n,r]=Is(t),[a,i]=n(t,{collectionRef:{current:null},itemMap:new Map}),u=g=>{const{scope:y,children:b}=g,O=R.useRef(null),C=R.useRef(new Map).current;return E.jsx(a,{scope:y,itemMap:C,collectionRef:O,children:b})};u.displayName=t;const l=e+"CollectionSlot",c=al(l),m=R.forwardRef((g,y)=>{const{scope:b,children:O}=g,C=i(l,b),k=Nt(y,C.collectionRef);return E.jsx(c,{ref:k,children:O})});m.displayName=l;const f=e+"CollectionItemSlot",d="data-radix-collection-item",v=al(f),_=R.forwardRef((g,y)=>{const{scope:b,children:O,...C}=g,k=R.useRef(null),P=Nt(y,k),A=i(f,b);return R.useEffect(()=>(A.itemMap.set(k,{ref:k,...C}),()=>void A.itemMap.delete(k))),E.jsx(v,{[d]:"",ref:P,children:O})});_.displayName=f;function w(g){const y=i(e+"CollectionConsumer",g);return R.useCallback(()=>{const O=y.collectionRef.current;if(!O)return[];const C=Array.from(O.querySelectorAll(`[${d}]`));return Array.from(y.itemMap.values()).sort((A,T)=>C.indexOf(A.ref.current)-C.indexOf(T.ref.current))},[y.collectionRef,y.itemMap])}return[{Provider:u,Slot:m,ItemSlot:_},w,r]}var DT=R.createContext(void 0);function Dv(e){const t=R.useContext(DT);return e||t||"ltr"}var $T=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],mt=$T.reduce((e,t)=>{const n=al(`Primitive.${t}`),r=R.forwardRef((a,i)=>{const{asChild:u,...l}=a,c=u?n:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),E.jsx(c,{...l,ref:i})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function LT(e,t){e&&Xl.flushSync(()=>e.dispatchEvent(t))}function $r(e){const t=R.useRef(e);return R.useEffect(()=>{t.current=e}),R.useMemo(()=>((...n)=>{var r;return(r=t.current)==null?void 0:r.call(t,...n)}),[])}var HT=Object.defineProperty,Lt=(e,t)=>HT(e,"name",{value:t,configurable:!0}),Z9="dismissableLayer.update",GT="dismissableLayer.pointerDownOutside",FT="dismissableLayer.focusOutside",f7,tP=R.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set,dismissableSurfaces:new Set}),nP=R.forwardRef(Lt(function(t,n){const{disableOutsidePointerEvents:r=!1,deferPointerDownOutside:a=!1,onEscapeKeyDown:i,onPointerDownOutside:u,onFocusOutside:l,onInteractOutside:c,onDismiss:m,...f}=t,d=R.useContext(tP),[v,_]=R.useState(null),w=(v==null?void 0:v.ownerDocument)??(globalThis==null?void 0:globalThis.document),[,g]=R.useState({}),y=Nt(n,_),b=Array.from(d.layers),[O]=[...d.layersWithOutsidePointerEventsDisabled].slice(-1),C=O?b.indexOf(O):-1,k=v?b.indexOf(v):-1,P=d.layersWithOutsidePointerEventsDisabled.size>0,A=k>=C,T=R.useRef(!1),q=rP(M=>{u==null||u(M),c==null||c(M),M.defaultPrevented||m==null||m()},{ownerDocument:w,deferPointerDownOutside:a,isDeferredPointerDownOutsideRef:T,dismissableSurfaces:d.dismissableSurfaces,shouldHandlePointerDownOutside:R.useCallback(M=>{if(!(M instanceof Node))return!1;const H=[...d.branches].some(F=>F.contains(M));return A&&!H},[d.branches,A])}),j=aP(M=>{if(a&&T.current)return;const H=M.target;[...d.branches].some(V=>V.contains(H))||(l==null||l(M),c==null||c(M),M.defaultPrevented||m==null||m())},w),B=v?k===b.length-1:!1,$=$r(M=>{M.key==="Escape"&&(i==null||i(M),!M.defaultPrevented&&m&&(M.preventDefault(),m()))});return R.useEffect(()=>{if(B)return w.addEventListener("keydown",$,{capture:!0}),()=>w.removeEventListener("keydown",$,{capture:!0})},[w,B,$]),R.useEffect(()=>{if(v)return r&&(d.layersWithOutsidePointerEventsDisabled.size===0&&(f7=w.body.style.pointerEvents,w.body.style.pointerEvents="none"),d.layersWithOutsidePointerEventsDisabled.add(v)),d.layers.add(v),J9(),()=>{r&&(d.layersWithOutsidePointerEventsDisabled.delete(v),d.layersWithOutsidePointerEventsDisabled.size===0&&(w.body.style.pointerEvents=f7))}},[v,w,r,d]),R.useEffect(()=>()=>{v&&(d.layers.delete(v),d.layersWithOutsidePointerEventsDisabled.delete(v),J9())},[v,d]),R.useEffect(()=>{const M=Lt(()=>g({}),"handleUpdate");return document.addEventListener(Z9,M),()=>document.removeEventListener(Z9,M)},[]),E.jsx(mt.div,{...f,ref:y,style:{pointerEvents:P?A?"auto":"none":void 0,...t.style},onFocusCapture:Ve(t.onFocusCapture,j.onFocusCapture),onBlurCapture:Ve(t.onBlurCapture,j.onBlurCapture),onPointerDownCapture:Ve(t.onPointerDownCapture,q.onPointerDownCapture)})},"DismissableLayer"));function BT(){const e=R.useContext(tP),[t,n]=R.useState(null);return R.useEffect(()=>{if(t)return e.dismissableSurfaces.add(t),()=>{e.dismissableSurfaces.delete(t)}},[t,e.dismissableSurfaces]),n}Lt(BT,"useDismissableLayerSurface");var zT=Lt(()=>!0,"IS_TRUE");function rP(e,t){const{ownerDocument:n=globalThis==null?void 0:globalThis.document,deferPointerDownOutside:r=!1,isDeferredPointerDownOutsideRef:a,dismissableSurfaces:i,shouldHandlePointerDownOutside:u=zT}=t,l=$r(e),c=R.useRef(!1),m=R.useRef(!1),f=R.useRef(new Map),d=R.useRef(()=>{});return R.useEffect(()=>{function v(){m.current=!1,a.current=!1,f.current.clear()}Lt(v,"resetOutsideInteraction");function _(){return Array.from(f.current.values()).some(Boolean)}Lt(_,"isOutsideInteractionIntercepted");function w(C){if(!m.current)return;const k=C.target;k instanceof Node&&[...i].some(A=>A.contains(k))||f.current.set(C.type,!0),C.type==="click"&&window.setTimeout(()=>{m.current&&d.current()},0)}Lt(w,"handleInteractionCapture");function g(C){m.current&&f.current.set(C.type,!1)}Lt(g,"handleInteractionBubble");const y=Lt(C=>{if(C.target&&!c.current){let k=function(){n.removeEventListener("click",d.current);const A=_();v(),A||$v(GT,l,P,{discrete:!0})};if(Lt(k,"handleAndDispatchPointerDownOutsideEvent"),!u(C.target)){n.removeEventListener("click",d.current),v(),c.current=!1;return}const P={originalEvent:C};m.current=!0,a.current=r&&C.button===0,f.current.clear(),!r||C.button!==0?k():(n.removeEventListener("click",d.current),d.current=k,n.addEventListener("click",d.current,{once:!0}))}else n.removeEventListener("click",d.current),v();c.current=!1},"handlePointerDown"),b=["pointerup","mousedown","mouseup","touchstart","touchend","click"];for(const C of b)n.addEventListener(C,w,!0),n.addEventListener(C,g);const O=window.setTimeout(()=>{n.addEventListener("pointerdown",y)},0);return()=>{window.clearTimeout(O),n.removeEventListener("pointerdown",y),n.removeEventListener("click",d.current);for(const C of b)n.removeEventListener(C,w,!0),n.removeEventListener(C,g)}},[n,l,r,a,i,u]),{onPointerDownCapture:Lt(()=>c.current=!0,"onPointerDownCapture")}}Lt(rP,"usePointerDownOutside");function aP(e,t=globalThis==null?void 0:globalThis.document){const n=$r(e),r=R.useRef(!1);return R.useEffect(()=>{const a=Lt(i=>{i.target&&!r.current&&$v(FT,n,{originalEvent:i},{discrete:!1})},"handleFocus");return t.addEventListener("focusin",a),()=>t.removeEventListener("focusin",a)},[t,n]),{onFocusCapture:Lt(()=>r.current=!0,"onFocusCapture"),onBlurCapture:Lt(()=>r.current=!1,"onBlurCapture")}}Lt(aP,"useFocusOutside");function J9(){const e=new CustomEvent(Z9);document.dispatchEvent(e)}Lt(J9,"dispatchUpdate");function $v(e,t,n,{discrete:r}){const a=n.originalEvent.target,i=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&a.addEventListener(e,t,{once:!0}),r?LT(a,i):a.dispatchEvent(i)}Lt($v,"handleAndDispatchCustomEvent");var hp=0,Pr=null;function UT(){R.useEffect(()=>{Pr||(Pr={start:v7(),end:v7()});const{start:e,end:t}=Pr;return document.body.firstElementChild!==e&&document.body.insertAdjacentElement("afterbegin",e),document.body.lastElementChild!==t&&document.body.insertAdjacentElement("beforeend",t),hp++,()=>{hp===1&&(Pr==null||Pr.start.remove(),Pr==null||Pr.end.remove(),Pr=null),hp=Math.max(0,hp-1)}},[])}function v7(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var WT=Object.defineProperty,pn=(e,t)=>WT(e,"name",{value:t,configurable:!0}),$d="focusScope.autoFocusOnMount",Ld="focusScope.autoFocusOnUnmount",h7={bubbles:!1,cancelable:!0},VT=R.forwardRef(pn(function(t,n){const{loop:r=!1,trapped:a=!1,onMountAutoFocus:i,onUnmountAutoFocus:u,...l}=t,[c,m]=R.useState(null),f=$r(i),d=$r(u),v=R.useRef(null),_=Nt(n,m),w=R.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;R.useEffect(()=>{if(a){let y=function(k){if(w.paused||!c)return;const P=k.target;c.contains(P)?v.current=P:ea(v.current,{select:!0})},b=function(k){if(w.paused||!c)return;const P=k.relatedTarget;P!==null&&(c.contains(P)||ea(v.current,{select:!0}))},O=function(k){if(document.activeElement===document.body)for(const A of k)A.removedNodes.length>0&&ea(c)};pn(y,"handleFocusIn"),pn(b,"handleFocusOut"),pn(O,"handleMutations"),document.addEventListener("focusin",y),document.addEventListener("focusout",b);const C=new MutationObserver(O);return c&&C.observe(c,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",y),document.removeEventListener("focusout",b),C.disconnect()}}},[a,c,w.paused]),R.useEffect(()=>{if(c){y7.add(w);const y=document.activeElement;if(!c.contains(y)){const O=new CustomEvent($d,h7);c.addEventListener($d,f),c.dispatchEvent(O),O.defaultPrevented||(oP(cP(Lv(c)),{select:!0}),document.activeElement===y&&ea(c))}return()=>{c.removeEventListener($d,f),setTimeout(()=>{const O=new CustomEvent(Ld,h7);c.addEventListener(Ld,d),c.dispatchEvent(O),O.defaultPrevented||ea(y??document.body,{select:!0}),c.removeEventListener(Ld,d),y7.remove(w)},0)}}},[c,f,d,w]);const g=R.useCallback(y=>{if(!r&&!a||w.paused)return;const b=y.key==="Tab"&&!y.altKey&&!y.ctrlKey&&!y.metaKey,O=document.activeElement;if(b&&O){const C=y.currentTarget,[k,P]=iP(C);k&&P?!y.shiftKey&&O===P?(y.preventDefault(),r&&ea(k,{select:!0})):y.shiftKey&&O===k&&(y.preventDefault(),r&&ea(P,{select:!0})):O===C&&y.preventDefault()}},[r,a,w.paused]);return E.jsx(mt.div,{tabIndex:-1,...l,ref:_,onKeyDown:g})},"FocusScope"));function oP(e,{select:t=!1}={}){const n=document.activeElement;for(const r of e)if(ea(r,{select:t}),document.activeElement!==n)return}pn(oP,"focusFirst");function iP(e){const t=Lv(e),n=e5(t,e),r=e5(t.reverse(),e);return[n,r]}pn(iP,"getTabbableEdges");function Lv(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:pn(r=>{const a=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||a?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP},"acceptNode")});for(;n.nextNode();)t.push(n.currentNode);return t}pn(Lv,"getTabbableCandidates");function e5(e,t){const n=typeof t.checkVisibility=="function"&&t.checkVisibility({checkVisibilityCSS:!0});for(const r of e)if(!(n?!r.checkVisibility({checkVisibilityCSS:!0}):sP(r,{upTo:t})))return r}pn(e5,"findVisible");function sP(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}pn(sP,"isHidden");function uP(e){return e instanceof HTMLInputElement&&"select"in e}pn(uP,"isSelectableInput");function ea(e,{select:t=!1}={}){if(e&&e.focus){const n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&uP(e)&&t&&e.select()}}pn(ea,"focus");var y7=lP();function lP(){let e=[];return{add(t){const n=e[0];t!==n&&(n==null||n.pause()),e=t5(e,t),e.unshift(t)},remove(t){var n;e=t5(e,t),(n=e[0])==null||n.resume()}}}pn(lP,"createFocusScopesStack");function t5(e,t){const n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}pn(t5,"arrayRemove");function cP(e){return e.filter(t=>t.tagName!=="A")}pn(cP,"removeLinks");var Pt=globalThis!=null&&globalThis.document?R.useLayoutEffect:()=>{},KT=js[" useId ".trim().toString()]||(()=>{}),XT=0;function X1(e){const[t,n]=R.useState(KT());return Pt(()=>{n(r=>r??String(XT++))},[e]),e||(t?`radix-${t}`:"")}const YT=["top","right","bottom","left"],no=Math.min,oa=Math.max,Fp=Math.round,yp=Math.floor,ia=e=>({x:e,y:e}),QT={left:"right",right:"left",bottom:"top",top:"bottom"};function pP(e,t,n){return oa(e,no(t,n))}function ca(e,t){return typeof e=="function"?e(t):e}function ro(e){return e.split("-")[0]}function Ds(e){return e.split("-")[1]}function Hv(e){return e==="x"?"y":"x"}function Gv(e){return e==="y"?"height":"width"}function Rr(e){const t=e[0];return t==="t"||t==="b"?"y":"x"}function Fv(e){return Hv(Rr(e))}function ZT(e,t,n){n===void 0&&(n=!1);const r=Ds(e),a=Fv(e),i=Gv(a);let u=a==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return t.reference[i]>t.floating[i]&&(u=Bp(u)),[u,Bp(u)]}function JT(e){const t=Bp(e);return[n5(e),t,n5(t)]}function n5(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}const _7=["left","right"],g7=["right","left"],eN=["top","bottom"],tN=["bottom","top"];function nN(e,t,n){switch(e){case"top":case"bottom":return n?t?g7:_7:t?_7:g7;case"left":case"right":return t?eN:tN;default:return[]}}function rN(e,t,n,r){const a=Ds(e);let i=nN(ro(e),n==="start",r);return a&&(i=i.map(u=>u+"-"+a),t&&(i=i.concat(i.map(n5)))),i}function Bp(e){const t=ro(e);return QT[t]+e.slice(t.length)}function aN(e){var t,n,r,a;return{top:(t=e.top)!=null?t:0,right:(n=e.right)!=null?n:0,bottom:(r=e.bottom)!=null?r:0,left:(a=e.left)!=null?a:0}}function mP(e){return typeof e!="number"?aN(e):{top:e,right:e,bottom:e,left:e}}function zp(e){const{x:t,y:n,width:r,height:a}=e;return{width:r,height:a,top:n,left:t,right:t+r,bottom:n+a,x:t,y:n}}function x7(e,t,n){let{reference:r,floating:a}=e;const i=Rr(t),u=Fv(t),l=Gv(u),c=ro(t),m=i==="y",f=r.x+r.width/2-a.width/2,d=r.y+r.height/2-a.height/2,v=r[l]/2-a[l]/2;let _;switch(c){case"top":_={x:f,y:r.y-a.height};break;case"bottom":_={x:f,y:r.y+r.height};break;case"right":_={x:r.x+r.width,y:d};break;case"left":_={x:r.x-a.width,y:d};break;default:_={x:r.x,y:r.y}}const w=Ds(t);return w&&(_[u]+=v*(w==="end"?1:-1)*(n&&m?-1:1)),_}async function oN(e,t){var n;t===void 0&&(t={});const{x:r,y:a,platform:i,rects:u,elements:l,strategy:c}=e,{boundary:m="clippingAncestors",rootBoundary:f="viewport",elementContext:d="floating",altBoundary:v=!1,padding:_=0}=ca(t,e),w=mP(_),y=l[v?d==="floating"?"reference":"floating":d],b=zp(await i.getClippingRect({element:(n=await(i.isElement==null?void 0:i.isElement(y)))==null||n?y:y.contextElement||await(i.getDocumentElement==null?void 0:i.getDocumentElement(l.floating)),boundary:m,rootBoundary:f,strategy:c})),O=d==="floating"?{x:r,y:a,width:u.floating.width,height:u.floating.height}:u.reference,C=await(i.getOffsetParent==null?void 0:i.getOffsetParent(l.floating)),k=await(i.isElement==null?void 0:i.isElement(C))&&await(i.getScale==null?void 0:i.getScale(C))||{x:1,y:1},P=zp(i.convertOffsetParentRelativeRectToViewportRelativeRect?await i.convertOffsetParentRelativeRectToViewportRelativeRect({elements:l,rect:O,offsetParent:C,strategy:c}):O);return{top:(b.top-P.top+w.top)/k.y,bottom:(P.bottom-b.bottom+w.bottom)/k.y,left:(b.left-P.left+w.left)/k.x,right:(P.right-b.right+w.right)/k.x}}const iN=50,sN=async(e,t,n)=>{const{placement:r="bottom",strategy:a="absolute",middleware:i=[],platform:u}=n,l=u.detectOverflow?u:{...u,detectOverflow:oN},c=await(u.isRTL==null?void 0:u.isRTL(t));let m=await u.getElementRects({reference:e,floating:t,strategy:a}),{x:f,y:d}=x7(m,r,c),v=r,_=0;const w={};for(let g=0;g({name:"arrow",options:e,async fn(t){const{x:n,y:r,placement:a,rects:i,platform:u,elements:l,middlewareData:c}=t,{element:m,padding:f=0}=ca(e,t)||{};if(m==null)return{};const d=mP(f),v={x:n,y:r},_=Fv(a),w=Gv(_),g=await u.getDimensions(m),y=_==="y",b=y?"top":"left",O=y?"bottom":"right",C=y?"clientHeight":"clientWidth",k=i.reference[w]+i.reference[_]-v[_]-i.floating[w],P=v[_]-i.reference[_],A=await(u.getOffsetParent==null?void 0:u.getOffsetParent(m));let T=A?A[C]:0;(!T||!await(u.isElement==null?void 0:u.isElement(A)))&&(T=l.floating[C]||i.floating[w]);const q=k/2-P/2,j=T/2-g[w]/2-1,B=no(d[b],j),$=no(d[O],j),M=T-g[w]-$,H=T/2-g[w]/2+q,F=pP(B,H,M),V=!c.arrow&&Ds(a)!=null&&H!==F&&i.reference[w]/2-(HF<=0)){var $,M;const F=((($=i.flip)==null?void 0:$.index)||0)+1,V=T[F];if(V&&(!(d==="alignment"?O!==Rr(V):!1)||B.every(z=>Rr(z.placement)===O?z.overflows[0]>0:!0)))return{data:{index:F,overflows:B},reset:{placement:V}};let K=(M=B.filter(J=>J.overflows[0]<=0).sort((J,z)=>J.overflows[1]-z.overflows[1])[0])==null?void 0:M.placement;if(!K)switch(_){case"bestFit":{var H;const J=(H=B.filter(z=>{if(A){const Y=Rr(z.placement);return Y===O||Y==="y"}return!0}).map(z=>[z.placement,z.overflows.filter(Y=>Y>0).reduce((Y,Q)=>Y+Q,0)]).sort((z,Y)=>z[1]-Y[1])[0])==null?void 0:H[0];J&&(K=J);break}case"initialPlacement":K=l;break}if(a!==K)return{reset:{placement:K}}}return{}}}};function w7(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function b7(e){return YT.some(t=>e[t]>=0)}const cN=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:n,platform:r}=t,{strategy:a="referenceHidden",...i}=ca(e,t);switch(a){case"referenceHidden":{const u=await r.detectOverflow(t,{...i,elementContext:"reference"}),l=w7(u,n.reference);return{data:{referenceHiddenOffsets:l,referenceHidden:b7(l)}}}case"escaped":{const u=await r.detectOverflow(t,{...i,altBoundary:!0}),l=w7(u,n.floating);return{data:{escapedOffsets:l,escaped:b7(l)}}}default:return{}}}}},dP=new Set(["left","top"]);async function pN(e,t){const{placement:n,platform:r,elements:a}=e,i=await(r.isRTL==null?void 0:r.isRTL(a.floating)),u=ro(n),l=Ds(n),c=Rr(n)==="y",m=dP.has(u)?-1:1,f=i&&c?-1:1,d=ca(t,e);let{mainAxis:v,crossAxis:_,alignmentAxis:w}=typeof d=="number"?{mainAxis:d,crossAxis:0,alignmentAxis:null}:{mainAxis:d.mainAxis||0,crossAxis:d.crossAxis||0,alignmentAxis:d.alignmentAxis};return l&&typeof w=="number"&&(_=l==="end"?w*-1:w),c?{x:_*f,y:v*m}:{x:v*m,y:_*f}}const mN=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,r;const{x:a,y:i,placement:u,middlewareData:l}=t,c=await pN(t,e);return u===((n=l.offset)==null?void 0:n.placement)&&(r=l.arrow)!=null&&r.alignmentOffset?{}:{x:a+c.x,y:i+c.y,data:{...c,placement:u}}}}},dN=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:r,placement:a,platform:i}=t,{mainAxis:u=!0,crossAxis:l=!1,limiter:c={fn:O=>{let{x:C,y:k}=O;return{x:C,y:k}}},...m}=ca(e,t),f={x:n,y:r},d=await i.detectOverflow(t,m),v=Rr(a),_=Hv(v);let w=f[_],g=f[v];const y=(O,C)=>pP(C+d[O==="y"?"top":"left"],C,C-d[O==="y"?"bottom":"right"]);u&&(w=y(_,w)),l&&(g=y(v,g));const b=c.fn({...t,[_]:w,[v]:g});return{...b,data:{x:b.x-n,y:b.y-r,enabled:{[_]:u,[v]:l}}}}}},fN=function(e){return e===void 0&&(e={}),{options:e,fn(t){var n,r;const{x:a,y:i,placement:u,rects:l,middlewareData:c}=t,{offset:m=0,mainAxis:f=!0,crossAxis:d=!0}=ca(e,t),v={x:a,y:i},_=Rr(u),w=Hv(_);let g=v[w],y=v[_];const b=ca(m,t),O=typeof b=="number"?{mainAxis:b,crossAxis:0}:{mainAxis:(n=b.mainAxis)!=null?n:0,crossAxis:(r=b.crossAxis)!=null?r:0};if(f){const P=w==="y"?"height":"width",A=l.reference[w]-l.floating[P]+O.mainAxis,T=l.reference[w]+l.reference[P]-O.mainAxis;gT&&(g=T)}if(d){var C,k;const P=w==="y"?"width":"height",A=dP.has(ro(u)),T=l.reference[_]-l.floating[P]+(A&&((C=c.offset)==null?void 0:C[_])||0)+(A?0:O.crossAxis),q=l.reference[_]+l.reference[P]+(A?0:((k=c.offset)==null?void 0:k[_])||0)-(A?O.crossAxis:0);yq&&(y=q)}return{[w]:g,[_]:y}}}},vN=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){const{placement:n,rects:r,platform:a,elements:i}=t,{apply:u=()=>{},...l}=ca(e,t),c=await a.detectOverflow(t,l),m=ro(n),f=Ds(n),d=Rr(n)==="y",{width:v,height:_}=r.floating;let w,g;m==="top"||m==="bottom"?(w=m,g=f===(await(a.isRTL==null?void 0:a.isRTL(i.floating))?"start":"end")?"left":"right"):(g=m,w=f==="end"?"top":"bottom");const y=_-c.top-c.bottom,b=v-c.left-c.right,O=no(_-c[w],y),C=no(v-c[g],b),k=t.middlewareData.shift,P=!k;let A=O,T=C;k!=null&&k.enabled.x&&(T=b),k!=null&&k.enabled.y&&(A=y),P&&!f&&(d?T=v-2*oa(c.left,c.right):A=_-2*oa(c.top,c.bottom)),await u({...t,availableWidth:T,availableHeight:A});const q=await a.getDimensions(i.floating);return v!==q.width||_!==q.height?{reset:{rects:!0}}:{}}}};function Y1(){return typeof window<"u"}function $s(e){return fP(e)?(e.nodeName||"").toLowerCase():"#document"}function bn(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function va(e){var t;return(t=(fP(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function fP(e){return Y1()?e instanceof Node||e instanceof bn(e).Node:!1}function Lr(e){return Y1()?e instanceof Element||e instanceof bn(e).Element:!1}function ao(e){return Y1()?e instanceof HTMLElement||e instanceof bn(e).HTMLElement:!1}function S7(e){return!Y1()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof bn(e).ShadowRoot}function Q1(e){const{overflow:t,overflowX:n,overflowY:r,display:a}=Hr(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&a!=="inline"&&a!=="contents"}function hN(e){return/^(table|td|th)$/.test($s(e))}function Z1(e){try{if(e.matches(":popover-open"))return!0}catch{}try{return e.matches(":modal")}catch{return!1}}const yN=/transform|translate|scale|rotate|perspective|filter/,_N=/paint|layout|strict|content/,ko=e=>!!e&&e!=="none";let Hd;function Bv(e){const t=Lr(e)?Hr(e):e;return ko(t.transform)||ko(t.translate)||ko(t.scale)||ko(t.rotate)||ko(t.perspective)||!zv()&&(ko(t.backdropFilter)||ko(t.filter))||yN.test(t.willChange||"")||_N.test(t.contain||"")}function gN(e){let t=zo(e);for(;ao(t)&&!ol(t);){if(Bv(t))return t;if(Z1(t))return null;t=zo(t)}return null}function zv(){return Hd==null&&(Hd=typeof CSS<"u"&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),Hd}function ol(e){return/^(html|body|#document)$/.test($s(e))}function Hr(e){return bn(e).getComputedStyle(e)}function J1(e){return Lr(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function zo(e){if($s(e)==="html")return e;const t=e.assignedSlot||e.parentNode||S7(e)&&e.host||va(e);return S7(t)?t.host:t}function vP(e){const t=zo(e);return ol(t)?(e.ownerDocument||e).body:ao(t)&&Q1(t)?t:vP(t)}function il(e,t,n){var r;t===void 0&&(t=[]),n===void 0&&(n=!0);const a=vP(e),i=a===((r=e.ownerDocument)==null?void 0:r.body),u=bn(a);if(i){const l=r5(u);return t.concat(u,u.visualViewport||[],Q1(a)?a:[],l&&n?il(l):[])}else return t.concat(a,il(a,[],n))}function r5(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function hP(e){const t=Hr(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const a=ao(e),i=a?e.offsetWidth:n,u=a?e.offsetHeight:r,l=Fp(n)!==i||Fp(r)!==u;return l&&(n=i,r=u),{width:n,height:r,$:l}}function Uv(e){return Lr(e)?e:e.contextElement}function Bi(e){const t=Uv(e);if(!ao(t))return ia(1);const n=t.getBoundingClientRect(),{width:r,height:a,$:i}=hP(t);let u=(i?Fp(n.width):n.width)/r,l=(i?Fp(n.height):n.height)/a;return(!u||!Number.isFinite(u))&&(u=1),(!l||!Number.isFinite(l))&&(l=1),{x:u,y:l}}const xN=ia(0);function yP(e){const t=bn(e);return!zv()||!t.visualViewport?xN:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function wN(e,t,n){return t===void 0&&(t=!1),!!n&&t&&n===bn(e)}function Uo(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);const a=e.getBoundingClientRect(),i=Uv(e);let u=ia(1);t&&(r?Lr(r)&&(u=Bi(r)):u=Bi(e));const l=wN(i,n,r)?yP(i):ia(0);let c=(a.left+l.x)/u.x,m=(a.top+l.y)/u.y,f=a.width/u.x,d=a.height/u.y;if(i&&r){const v=bn(i),_=Lr(r)?bn(r):r;let w=v,g=r5(w);for(;g&&_!==w;){const y=Bi(g),b=g.getBoundingClientRect(),O=Hr(g),C=b.left+(g.clientLeft+parseFloat(O.paddingLeft))*y.x,k=b.top+(g.clientTop+parseFloat(O.paddingTop))*y.y;c*=y.x,m*=y.y,f*=y.x,d*=y.y,c+=C,m+=k,w=bn(g),g=r5(w)}}return zp({width:f,height:d,x:c,y:m})}function e0(e,t){const n=J1(e).scrollLeft;return t?t.left+n:Uo(va(e)).left+n}function _P(e,t){const n=e.getBoundingClientRect(),r=n.left+t.scrollLeft-e0(e,n),a=n.top+t.scrollTop;return{x:r,y:a}}function bN(e){let{elements:t,rect:n,offsetParent:r,strategy:a}=e;const i=a==="fixed",u=va(r),l=t?Z1(t.floating):!1;if(r===u||l&&i)return n;let c={scrollLeft:0,scrollTop:0},m=ia(1);const f=ia(0),d=ao(r);if((d||!i)&&(($s(r)!=="body"||Q1(u))&&(c=J1(r)),d)){const _=Uo(r);m=Bi(r),f.x=_.x+r.clientLeft,f.y=_.y+r.clientTop}const v=u&&!d&&!i?_P(u,c):ia(0);return{width:n.width*m.x,height:n.height*m.y,x:n.x*m.x-c.scrollLeft*m.x+f.x+v.x,y:n.y*m.y-c.scrollTop*m.y+f.y+v.y}}function SN(e){return e.getClientRects?Array.from(e.getClientRects()):[]}function PN(e){const t=J1(e),n=e.ownerDocument.body,r=oa(e.scrollWidth,e.clientWidth,n.scrollWidth,n.clientWidth),a=oa(e.scrollHeight,e.clientHeight,n.scrollHeight,n.clientHeight);let i=-t.scrollLeft+e0(e);const u=-t.scrollTop;return Hr(n).direction==="rtl"&&(i+=oa(e.clientWidth,n.clientWidth)-r),{width:r,height:a,x:i,y:u}}const ON=25;function kN(e,t,n){n===void 0&&(n="viewport");const r=n==="layoutViewport",a=bn(e),i=va(e),u=a.visualViewport;let l=i.clientWidth,c=i.clientHeight,m=0,f=0;if(u){const v=!zv()||t==="fixed";r?v||(m=-u.offsetLeft,f=-u.offsetTop):(l=u.width,c=u.height,v&&(m=u.offsetLeft,f=u.offsetTop))}if(e0(i)<=0){const v=i.ownerDocument,_=v.body,w=getComputedStyle(_),g=v.compatMode==="CSS1Compat"&&parseFloat(w.marginLeft)+parseFloat(w.marginRight)||0,y=Math.abs(i.clientWidth-_.clientWidth-g),b=getComputedStyle(i).scrollbarGutter==="stable both-edges"?y/2:y;b<=ON&&(l-=b)}return{width:l,height:c,x:m,y:f}}function CN(e,t){const n=Uo(e,!0,t==="fixed"),r=n.top+e.clientTop,a=n.left+e.clientLeft,i=Bi(e),u=e.clientWidth*i.x,l=e.clientHeight*i.y,c=a*i.x,m=r*i.y;return{width:u,height:l,x:c,y:m}}function P7(e,t,n){let r;if(t==="viewport"||t==="layoutViewport")r=kN(e,n,t);else if(t==="document")r=PN(va(e));else if(Lr(t))r=CN(t,n);else{const a=yP(e);r={x:t.x-a.x,y:t.y-a.y,width:t.width,height:t.height}}return zp(r)}function AN(e,t){const n=t.get(e);if(n)return n;let r=il(e,[],!1).filter(l=>Lr(l)&&$s(l)!=="body"),a=null;const i=Hr(e).position==="fixed";let u=i?zo(e):e;for(;Lr(u)&&!ol(u);){const l=Hr(u),c=Bv(u),m=a?a.position:i?"fixed":"";!c&&(m==="fixed"||m==="absolute"&&l.position==="static")?r=r.filter(d=>d!==u):a=l,u=zo(u)}return t.set(e,r),r}function EN(e){let{element:t,boundary:n,rootBoundary:r,strategy:a}=e;const u=[...n==="clippingAncestors"?Z1(t)?[]:AN(t,this._c):[].concat(n),r],l=P7(t,u[0],a);let c=l.top,m=l.right,f=l.bottom,d=l.left;for(let v=1;v{l(!1,1e-7)},1e3)}T=!1}try{r=new IntersectionObserver(q,{...A,root:i.ownerDocument})}catch{r=new IntersectionObserver(q,A)}r.observe(e)}const c=bn(e),m=()=>l(n);return c.addEventListener("resize",m),l(!0),()=>{c.removeEventListener("resize",m),u()}}function IN(e,t,n,r){r===void 0&&(r={});const{ancestorScroll:a=!0,ancestorResize:i=!0,elementResize:u=typeof ResizeObserver=="function",layoutShift:l=typeof IntersectionObserver=="function",animationFrame:c=!1}=r,m=Uv(e),f=a||i?[...m?il(m):[],...t?il(t):[]]:[];f.forEach(b=>{a&&b.addEventListener("scroll",n),i&&b.addEventListener("resize",n)});const d=m&&l?MN(m,n,i):null;let v=-1,_=null;u&&(_=new ResizeObserver(b=>{let[O]=b;O&&O.target===m&&_&&t&&(_.unobserve(t),cancelAnimationFrame(v),v=requestAnimationFrame(()=>{var C;(C=_)==null||C.observe(t)})),n()}),m&&!c&&_.observe(m),t&&_.observe(t));let w,g=c?Uo(e):null;c&&y();function y(){const b=Uo(e);g&&!xP(g,b)&&n(),g=b,w=requestAnimationFrame(y)}return n(),()=>{var b;f.forEach(O=>{a&&O.removeEventListener("scroll",n),i&&O.removeEventListener("resize",n)}),d==null||d(),(b=_)==null||b.disconnect(),_=null,c&&cancelAnimationFrame(w)}}const DN=mN,$N=dN,LN=lN,HN=vN,GN=cN,k7=uN,FN=fN,BN=(e,t,n)=>{const r=new Map,a=n??{},i={...jN,...a.platform,_c:r};return sN(e,t,{...a,platform:i})};var zN=typeof document<"u",UN=function(){},Dp=zN?R.useLayoutEffect:UN;function Up(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let n,r,a;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(!Up(e[r],t[r]))return!1;return!0}if(a=Object.keys(e),n=a.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!{}.hasOwnProperty.call(t,a[r]))return!1;for(r=n;r--!==0;){const i=a[r];if(!(i==="_owner"&&e.$$typeof)&&!Up(e[i],t[i]))return!1}return!0}return e!==e&&t!==t}function wP(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function C7(e,t){const n=wP(e);return Math.round(t*n)/n}function Fd(e){const t=R.useRef(e);return Dp(()=>{t.current=e}),t}function WN(e){e===void 0&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:r=[],platform:a,elements:{reference:i,floating:u}={},transform:l=!0,whileElementsMounted:c,open:m}=e,[f,d]=R.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[v,_]=R.useState(r);Up(v,r)||_(r);const[w,g]=R.useState(null),[y,b]=R.useState(null),O=R.useCallback(z=>{z!==A.current&&(A.current=z,g(z))},[]),C=R.useCallback(z=>{z!==T.current&&(T.current=z,b(z))},[]),k=i||w,P=u||y,A=R.useRef(null),T=R.useRef(null),q=R.useRef(f),j=c!=null,B=Fd(c),$=Fd(a),M=Fd(m),H=R.useCallback(()=>{if(!A.current||!T.current)return;const z={placement:t,strategy:n,middleware:v};$.current&&(z.platform=$.current),BN(A.current,T.current,z).then(Y=>{const Q={...Y,isPositioned:M.current!==!1};F.current&&!Up(q.current,Q)&&(q.current=Q,Xl.flushSync(()=>{d(Q)}))})},[v,t,n,$,M]);Dp(()=>{m===!1&&q.current.isPositioned&&(q.current.isPositioned=!1,d(z=>({...z,isPositioned:!1})))},[m]);const F=R.useRef(!1);Dp(()=>(F.current=!0,()=>{F.current=!1}),[]),Dp(()=>{if(k&&(A.current=k),P&&(T.current=P),k&&P){if(B.current)return B.current(k,P,H);H()}},[k,P,H,B,j]);const V=R.useMemo(()=>({reference:A,floating:T,setReference:O,setFloating:C}),[O,C]),K=R.useMemo(()=>({reference:k,floating:P}),[k,P]),J=R.useMemo(()=>{const z={position:n,left:0,top:0};if(!K.floating)return z;const Y=C7(K.floating,f.x),Q=C7(K.floating,f.y);return l?{...z,transform:"translate("+Y+"px, "+Q+"px)",...wP(K.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:Y,top:Q}},[n,l,K.floating,f.x,f.y]);return R.useMemo(()=>({...f,update:H,refs:V,elements:K,floatingStyles:J}),[f,H,V,K,J])}const VN=e=>{function t(n){return{}.hasOwnProperty.call(n,"current")}return{name:"arrow",options:e,fn(n){const{element:r,padding:a}=typeof e=="function"?e(n):e;return r&&t(r)?r.current!=null?k7({element:r.current,padding:a}).fn(n):{}:r?k7({element:r,padding:a}).fn(n):{}}}},KN=(e,t)=>{const n=DN(e);return{name:n.name,fn:n.fn,options:[e,t]}},XN=(e,t)=>{const n=$N(e);return{name:n.name,fn:n.fn,options:[e,t]}},YN=(e,t)=>({fn:FN(e).fn,options:[e,t]}),QN=(e,t)=>{const n=LN(e);return{name:n.name,fn:n.fn,options:[e,t]}},ZN=(e,t)=>{const n=HN(e);return{name:n.name,fn:n.fn,options:[e,t]}},JN=(e,t)=>{const n=GN(e);return{name:n.name,fn:n.fn,options:[e,t]}},eq=(e,t)=>{const n=VN(e);return{name:n.name,fn:n.fn,options:[e,t]}};function tq(e){const[t,n]=R.useState(void 0);return Pt(()=>{if(e){n({width:e.offsetWidth,height:e.offsetHeight});const r=new ResizeObserver(a=>{if(!Array.isArray(a)||!a.length)return;const i=a[0];let u,l;if("borderBoxSize"in i){const c=i.borderBoxSize,m=Array.isArray(c)?c[0]:c;u=m.inlineSize,l=m.blockSize}else u=e.offsetWidth,l=e.offsetHeight;n({width:u,height:l})});return r.observe(e,{box:"border-box"}),()=>r.unobserve(e)}else n(void 0)},[e]),t}var nq=Object.defineProperty,eo=(e,t)=>nq(e,"name",{value:t,configurable:!0}),bP="Popper",[SP,t0]=Is(bP),[rq,PP]=SP(bP),aq=eo(e=>{const{__scopePopper:t,children:n}=e,[r,a]=R.useState(null),[i,u]=R.useState(void 0);return E.jsx(rq,{scope:t,anchor:r,onAnchorChange:a,placementState:i,setPlacementState:u,children:n})},"Popper"),oq="PopperAnchor",iq=R.forwardRef(eo(function(t,n){const{__scopePopper:r,virtualRef:a,...i}=t,u=PP(oq,r),l=R.useRef(null),c=u.onAnchorChange,m=R.useCallback(g=>{l.current=g,g&&c(g)},[c]),f=Nt(n,m),d=R.useRef(null);R.useEffect(()=>{if(!a)return;const g=d.current;d.current=a.current,g!==d.current&&c(d.current)});const v=u.placementState&&n0(u.placementState),_=v==null?void 0:v[0],w=v==null?void 0:v[1];return a?null:E.jsx(mt.div,{"data-radix-popper-side":_,"data-radix-popper-align":w,...i,ref:f})},"PopperAnchor")),OP="PopperContent",[sq,zte]=SP(OP),uq=R.forwardRef(eo(function(t,n){var ae,de,fe,te,be,Ce,Le;const{__scopePopper:r,side:a="bottom",sideOffset:i=0,align:u="center",alignOffset:l=0,arrowPadding:c=0,avoidCollisions:m=!0,collisionBoundary:f=[],collisionPadding:d=0,sticky:v="partial",hideWhenDetached:_=!1,updatePositionStrategy:w="optimized",onPlaced:g,...y}=t,b=PP(OP,r),[O,C]=R.useState(null),k=Nt(n,C),[P,A]=R.useState(null),T=tq(P),q=(T==null?void 0:T.width)??0,j=(T==null?void 0:T.height)??0,B=a+(u!=="center"?"-"+u:""),$=typeof d=="number"?d:{top:0,right:0,bottom:0,left:0,...d},M=Array.isArray(f)?f:[f],H=M.length>0,F={padding:$,boundary:M.filter(kP),altBoundary:H},{refs:V,floatingStyles:K,placement:J,isPositioned:z,middlewareData:Y}=WN({strategy:"fixed",placement:B,whileElementsMounted:eo((...ze)=>IN(...ze,{animationFrame:w==="always"}),"whileElementsMounted"),elements:{reference:b.anchor},middleware:[KN({mainAxis:i+j,alignmentAxis:l}),m&&XN({mainAxis:!0,crossAxis:!1,limiter:v==="partial"?YN():void 0,...F}),m&&QN({...F}),ZN({...F,apply:eo(({elements:ze,rects:ot,availableWidth:Gt,availableHeight:Mn})=>{const{width:In,height:Xt}=ot.reference,Yt=ze.floating.style;Yt.setProperty("--radix-popper-available-width",`${Gt}px`),Yt.setProperty("--radix-popper-available-height",`${Mn}px`),Yt.setProperty("--radix-popper-anchor-width",`${In}px`),Yt.setProperty("--radix-popper-anchor-height",`${Xt}px`)},"apply")}),P&&eq({element:P,padding:c}),lq({arrowWidth:q,arrowHeight:j}),_&&JN({strategy:"referenceHidden",...F,boundary:H?F.boundary:void 0})]}),Q=b.setPlacementState;Pt(()=>(Q(J),()=>{Q(void 0)}),[J,Q]);const[D,W]=n0(J),oe=$r(g);Pt(()=>{z&&(oe==null||oe())},[z,oe]);const me=(ae=Y.arrow)==null?void 0:ae.x,ge=(de=Y.arrow)==null?void 0:de.y,Se=((fe=Y.arrow)==null?void 0:fe.centerOffset)!==0,[qe,pe]=R.useState();return Pt(()=>{O&&pe(window.getComputedStyle(O).zIndex)},[O]),E.jsx("div",{ref:V.setFloating,"data-radix-popper-content-wrapper":"",style:{...K,transform:z?K.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:qe,"--radix-popper-transform-origin":[(te=Y.transformOrigin)==null?void 0:te.x,(be=Y.transformOrigin)==null?void 0:be.y].join(" "),...((Ce=Y.hide)==null?void 0:Ce.referenceHidden)&&{visibility:"hidden",pointerEvents:"none"}},dir:t.dir,children:E.jsx(sq,{scope:r,placedSide:D,placedAlign:W,onArrowChange:A,arrowX:me,arrowY:ge,shouldHideArrow:Se,children:E.jsx(mt.div,{"data-side":D,"data-align":W,...y,ref:k,style:{...y.style,animation:z?(Le=y.style)==null?void 0:Le.animation:"none"}})})})},"PopperContent"));function kP(e){return e!==null}eo(kP,"isNotNull");var lq=eo(e=>({name:"transformOrigin",options:e,fn(t){var y,b,O;const{placement:n,rects:r,middlewareData:a}=t,u=((y=a.arrow)==null?void 0:y.centerOffset)!==0,l=u?0:e.arrowWidth,c=u?0:e.arrowHeight,[m,f]=n0(n),d={start:"0%",center:"50%",end:"100%"}[f],v=(((b=a.arrow)==null?void 0:b.x)??0)+l/2,_=(((O=a.arrow)==null?void 0:O.y)??0)+c/2;let w="",g="";return m==="bottom"?(w=u?d:`${v}px`,g=`${-c}px`):m==="top"?(w=u?d:`${v}px`,g=`${r.floating.height+c}px`):m==="right"?(w=`${-c}px`,g=u?d:`${_}px`):m==="left"&&(w=`${r.floating.width+c}px`,g=u?d:`${_}px`),{data:{x:w,y:g}}}}),"transformOrigin");function n0(e){const[t,n="center"]=e.split("-");return[t,n]}eo(n0,"getSideAndAlignFromPlacement");var cq=aq,pq=iq,CP=uq,mq=Object.defineProperty,dq=(e,t)=>mq(e,"name",{value:t,configurable:!0}),fq=R.forwardRef(dq(function(t,n){var c;const{container:r,...a}=t,[i,u]=R.useState(!1);Pt(()=>u(!0),[]);const l=r||i&&((c=globalThis==null?void 0:globalThis.document)==null?void 0:c.body);return l?Xl.createPortal(E.jsx(mt.div,{...a,ref:n}),l):null},"Portal")),vq=Object.defineProperty,pa=(e,t)=>vq(e,"name",{value:t,configurable:!0});function AP(e,t){return R.useReducer((n,r)=>t[n][r]??n,e)}pa(AP,"useStateMachine");var Wv=pa(e=>{const{present:t,children:n}=e,r=EP(t),a=typeof n=="function"?n({present:r.isPresent}):R.Children.only(n),i=RP(r.ref,TP(a));return typeof n=="function"||r.isPresent?R.cloneElement(a,{ref:i}):null},"Presence");function EP(e){const[t,n]=R.useState(),r=R.useRef(null),a=R.useRef(e),i=R.useRef("none"),u=R.useRef(void 0),l=e?"mounted":"unmounted",[c,m]=AP(l,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return R.useEffect(()=>{c==="mounted"?(i.current=u.current??Li(r.current),u.current=void 0):i.current="none"},[c]),Pt(()=>{const f=r.current,d=a.current;if(d!==e){const _=i.current,w=Li(f);e?(u.current=w,m("MOUNT")):w==="none"||(f==null?void 0:f.display)==="none"?m("UNMOUNT"):m(d&&_!==w?"ANIMATION_OUT":"UNMOUNT"),a.current=e}},[e,m]),Pt(()=>{if(t){let f;const d=t.ownerDocument.defaultView??window,v=pa(w=>{const y=Li(r.current).includes(CSS.escape(w.animationName));if(w.target===t&&y&&(m("ANIMATION_END"),!a.current)){const b=t.style.animationFillMode;t.style.animationFillMode="forwards",f=d.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=b)})}},"handleAnimationEnd"),_=pa(w=>{w.target===t&&(i.current=Li(r.current))},"handleAnimationStart");return t.addEventListener("animationstart",_),t.addEventListener("animationcancel",v),t.addEventListener("animationend",v),()=>{d.clearTimeout(f),t.removeEventListener("animationstart",_),t.removeEventListener("animationcancel",v),t.removeEventListener("animationend",v)}}else m("ANIMATION_END")},[t,m]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:R.useCallback(f=>{if(f){const d=getComputedStyle(f);r.current=d,u.current=Li(d)}else r.current=null;n(f)},[])}}pa(EP,"usePresence");function a5(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}pa(a5,"setRef");function RP(...e){const t=R.useRef(e);return t.current=e,R.useCallback(n=>{const r=t.current;let a=!1;const i=r.map(u=>{const l=a5(u,n);return!a&&typeof l=="function"&&(a=!0),l});if(a)return()=>{for(let u=0;u{throw new Error("Cannot call an event handler while rendering.")});return typeof E7=="function"?E7(()=>{t.current=e}):Pt(()=>{t.current=e}),R.useMemo(()=>((...n)=>{var r;return(r=t.current)==null?void 0:r.call(t,...n)}),[])}var yq=Object.defineProperty,Yl=(e,t)=>yq(e,"name",{value:t,configurable:!0}),_q=js[" useInsertionEffect ".trim().toString()]||Pt;function sl({prop:e,defaultProp:t,onChange:n=Yl(()=>{},"onChange"),caller:r}){const[a,i,u]=NP({defaultProp:t,onChange:n}),l=e!==void 0,c=l?e:a,m=R.useCallback(f=>{var d;if(l){const v=qP(f)?f(e):f;v!==e&&((d=u.current)==null||d.call(u,v))}else i(f)},[l,e,i,u]);return[c,m]}Yl(sl,"useControllableState");function NP({defaultProp:e,onChange:t}){const[n,r]=R.useState(e),a=R.useRef(n),i=R.useRef(t);return _q(()=>{i.current=t},[t]),R.useEffect(()=>{var u;a.current!==n&&((u=i.current)==null||u.call(i,n),a.current=n)},[n,a]),[n,r,i]}Yl(NP,"useUncontrolledState");function qP(e){return typeof e=="function"}Yl(qP,"isFunction");var R7=Symbol("RADIX:SYNC_STATE");function gq(e,t,n,r){const{prop:a,defaultProp:i,onChange:u,caller:l}=t,c=a!==void 0,m=hq(u),f=[{...n,state:i}];r&&f.push(r);const[d,v]=R.useReducer((y,b)=>{if(b.type===R7)return{...y,state:b.state};const O=e(y,b);return c&&!Object.is(O.state,y.state)&&m(O.state),O},...f),_=d.state,w=R.useRef(_);R.useEffect(()=>{w.current!==_&&(w.current=_,c||m(_))},[_,w,c]);const g=R.useMemo(()=>a!==void 0?{...d,state:a}:d,[d,a]);return R.useEffect(()=>{c&&!Object.is(a,d.state)&&v({type:R7,state:a})},[a,d.state,c]),[g,v]}Yl(gq,"useControllableStateReducer");function xq(e){const t=R.useRef({value:e,previous:e});return R.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}var wq=Object.defineProperty,bq=(e,t)=>wq(e,"name",{value:t,configurable:!0}),jP=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),Sq=R.forwardRef(bq(function(t,n){return E.jsx(mt.span,{...t,ref:n,style:{...jP,...t.style}})},"VisuallyHidden")),Pq=Sq,Oq=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},Ni=new WeakMap,_p=new WeakMap,gp={},Bd=0,MP=function(e){return e&&(e.host||MP(e.parentNode))},kq=function(e,t){return t.map(function(n){if(e.contains(n))return n;var r=MP(n);return r&&e.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},Cq=function(e,t,n,r){var a=kq(t,Array.isArray(e)?e:[e]);gp[n]||(gp[n]=new WeakMap);var i=gp[n],u=[],l=new Set,c=new Set(a),m=function(d){!d||l.has(d)||(l.add(d),m(d.parentNode))};a.forEach(m);var f=function(d){!d||c.has(d)||Array.prototype.forEach.call(d.children,function(v){if(l.has(v))f(v);else try{var _=v.getAttribute(r),w=_!==null&&_!=="false",g=(Ni.get(v)||0)+1,y=(i.get(v)||0)+1;Ni.set(v,g),i.set(v,y),u.push(v),g===1&&w&&_p.set(v,!0),y===1&&v.setAttribute(n,"true"),w||v.setAttribute(r,"true")}catch(b){console.error("aria-hidden: cannot operate on ",v,b)}})};return f(t),l.clear(),Bd++,function(){u.forEach(function(d){var v=Ni.get(d)-1,_=i.get(d)-1;Ni.set(d,v),i.set(d,_),v||(_p.has(d)||d.removeAttribute(r),_p.delete(d)),_||d.removeAttribute(n)}),Bd--,Bd||(Ni=new WeakMap,Ni=new WeakMap,_p=new WeakMap,gp={})}},Aq=function(e,t,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(e)?e:[e]),a=Oq(e);return a?(r.push.apply(r,Array.from(a.querySelectorAll("[aria-live], script"))),Cq(r,a,n,"aria-hidden")):function(){return null}},Er=function(){return Er=Object.assign||function(t){for(var n,r=1,a=arguments.length;r"u")return Uq;var t=Wq(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},Kq=LP(),zi="data-scroll-locked",Xq=function(e,t,n,r){var a=e.left,i=e.top,u=e.right,l=e.gap;return n===void 0&&(n="margin"),` + .`.concat(Rq,` { overflow: hidden `).concat(r,`; - padding-right: `).concat(s,"px ").concat(r,`; + padding-right: `).concat(l,"px ").concat(r,`; } - body[`).concat(fi,`] { + body[`).concat(zi,`] { overflow: hidden `).concat(r,`; overscroll-behavior: contain; `).concat([t&&"position: relative ".concat(r,";"),n==="margin"&&` padding-left: `.concat(a,`px; - padding-top: `).concat(o,`px; - padding-right: `).concat(i,`px; + padding-top: `).concat(i,`px; + padding-right: `).concat(u,`px; margin-left:0; margin-top:0; - margin-right: `).concat(s,"px ").concat(r,`; - `),n==="padding"&&"padding-right: ".concat(s,"px ").concat(r,";")].filter(Boolean).join(""),` + margin-right: `).concat(l,"px ").concat(r,`; + `),n==="padding"&&"padding-right: ".concat(l,"px ").concat(r,";")].filter(Boolean).join(""),` } - .`).concat(Gc,` { - right: `).concat(s,"px ").concat(r,`; + .`).concat($p,` { + right: `).concat(l,"px ").concat(r,`; } - .`).concat(Bc,` { - margin-right: `).concat(s,"px ").concat(r,`; + .`).concat(Lp,` { + margin-right: `).concat(l,"px ").concat(r,`; } - .`).concat(Gc," .").concat(Gc,` { + .`).concat($p," .").concat($p,` { right: 0 `).concat(r,`; } - .`).concat(Bc," .").concat(Bc,` { + .`).concat(Lp," .").concat(Lp,` { margin-right: 0 `).concat(r,`; } - body[`).concat(fi,`] { - `).concat(kE,": ").concat(s,`px; + body[`).concat(zi,`] { + `).concat(Tq,": ").concat(l,`px; } -`)},Zv=function(){var e=parseInt(document.body.getAttribute(fi)||"0",10);return isFinite(e)?e:0},UE=function(){P.useEffect(function(){return document.body.setAttribute(fi,(Zv()+1).toString()),function(){var e=Zv()-1;e<=0?document.body.removeAttribute(fi):document.body.setAttribute(fi,e.toString())}},[])},WE=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,a=r===void 0?"margin":r;UE();var o=P.useMemo(function(){return BE(a)},[a]);return P.createElement(FE,{styles:zE(o,!t,a,n?"":"!important")})},i3=!1;if(typeof window<"u")try{var cc=Object.defineProperty({},"passive",{get:function(){return i3=!0,!0}});window.addEventListener("test",cc,cc),window.removeEventListener("test",cc,cc)}catch{i3=!1}var Ho=i3?{passive:!1}:!1,VE=function(e){return e.tagName==="TEXTAREA"},p_=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!=="hidden"&&!(n.overflowY===n.overflowX&&!VE(e)&&n[t]==="visible")},KE=function(e){return p_(e,"overflowY")},XE=function(e){return p_(e,"overflowX")},Jv=function(e,t){var n=t.ownerDocument,r=t;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var a=m_(e,r);if(a){var o=d_(e,r),i=o[1],s=o[2];if(i>s)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},YE=function(e){var t=e.scrollTop,n=e.scrollHeight,r=e.clientHeight;return[t,n,r]},QE=function(e){var t=e.scrollLeft,n=e.scrollWidth,r=e.clientWidth;return[t,n,r]},m_=function(e,t){return e==="v"?KE(t):XE(t)},d_=function(e,t){return e==="v"?YE(t):QE(t)},ZE=function(e,t){return e==="h"&&t==="rtl"?-1:1},JE=function(e,t,n,r,a){var o=ZE(e,window.getComputedStyle(t).direction),i=o*r,s=n.target,u=t.contains(s),l=!1,p=i>0,c=0,m=0;do{if(!s)break;var d=d_(e,s),g=d[0],f=d[1],y=d[2],v=f-y-o*g;(g||v)&&m_(e,s)&&(c+=v,m+=g);var h=s.parentNode;s=h&&h.nodeType===Node.DOCUMENT_FRAGMENT_NODE?h.host:h}while(!u&&s!==document.body||u&&(t.contains(s)||t===s));return(p&&Math.abs(c)<1||!p&&Math.abs(m)<1)&&(l=!0),l},pc=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},e2=function(e){return[e.deltaX,e.deltaY]},t2=function(e){return e&&"current"in e?e.current:e},eN=function(e,t){return e[0]===t[0]&&e[1]===t[1]},tN=function(e){return` +`)},N7=function(){var e=parseInt(document.body.getAttribute(zi)||"0",10);return isFinite(e)?e:0},Yq=function(){R.useEffect(function(){return document.body.setAttribute(zi,(N7()+1).toString()),function(){var e=N7()-1;e<=0?document.body.removeAttribute(zi):document.body.setAttribute(zi,e.toString())}},[])},Qq=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,a=r===void 0?"margin":r;Yq();var i=R.useMemo(function(){return Vq(a)},[a]);return R.createElement(Kq,{styles:Xq(i,!t,a,n?"":"!important")})},o5=!1;if(typeof window<"u")try{var xp=Object.defineProperty({},"passive",{get:function(){return o5=!0,!0}});window.addEventListener("test",xp,xp),window.removeEventListener("test",xp,xp)}catch{o5=!1}var qi=o5?{passive:!1}:!1,Zq=function(e){return e.tagName==="TEXTAREA"},HP=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!=="hidden"&&!(n.overflowY===n.overflowX&&!Zq(e)&&n[t]==="visible")},Jq=function(e){return HP(e,"overflowY")},ej=function(e){return HP(e,"overflowX")},q7=function(e,t){var n=t.ownerDocument,r=t;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var a=GP(e,r);if(a){var i=FP(e,r),u=i[1],l=i[2];if(u>l)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},tj=function(e){var t=e.scrollTop,n=e.scrollHeight,r=e.clientHeight;return[t,n,r]},nj=function(e){var t=e.scrollLeft,n=e.scrollWidth,r=e.clientWidth;return[t,n,r]},GP=function(e,t){return e==="v"?Jq(t):ej(t)},FP=function(e,t){return e==="v"?tj(t):nj(t)},rj=function(e,t){return e==="h"&&t==="rtl"?-1:1},aj=function(e,t,n,r,a){var i=rj(e,window.getComputedStyle(t).direction),u=i*r,l=n.target,c=t.contains(l),m=!1,f=u>0,d=0,v=0;do{if(!l)break;var _=FP(e,l),w=_[0],g=_[1],y=_[2],b=g-y-i*w;(w||b)&&GP(e,l)&&(d+=b,v+=w);var O=l.parentNode;l=O&&O.nodeType===Node.DOCUMENT_FRAGMENT_NODE?O.host:O}while(!c&&l!==document.body||c&&(t.contains(l)||t===l));return(f&&Math.abs(d)<1||!f&&Math.abs(v)<1)&&(m=!0),m},wp=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},j7=function(e){return[e.deltaX,e.deltaY]},M7=function(e){return e&&"current"in e?e.current:e},oj=function(e,t){return e[0]===t[0]&&e[1]===t[1]},ij=function(e){return` .block-interactivity-`.concat(e,` {pointer-events: none;} .allow-interactivity-`).concat(e,` {pointer-events: all;} -`)},nN=0,Go=[];function rN(e){var t=P.useRef([]),n=P.useRef([0,0]),r=P.useRef(),a=P.useState(nN++)[0],o=P.useState(c_)[0],i=P.useRef(e);P.useEffect(function(){i.current=e},[e]),P.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(a));var f=PE([e.lockRef.current],(e.shards||[]).map(t2),!0).filter(Boolean);return f.forEach(function(y){return y.classList.add("allow-interactivity-".concat(a))}),function(){document.body.classList.remove("block-interactivity-".concat(a)),f.forEach(function(y){return y.classList.remove("allow-interactivity-".concat(a))})}}},[e.inert,e.lockRef.current,e.shards]);var s=P.useCallback(function(f,y){if("touches"in f&&f.touches.length===2||f.type==="wheel"&&f.ctrlKey)return!i.current.allowPinchZoom;var v=pc(f),h=n.current,_="deltaX"in f?f.deltaX:h[0]-v[0],w="deltaY"in f?f.deltaY:h[1]-v[1],x,S=f.target,O=Math.abs(_)>Math.abs(w)?"h":"v";if("touches"in f&&O==="h"&&S.type==="range")return!1;var k=window.getSelection(),C=k&&k.anchorNode,N=C?C===S||C.contains(S):!1;if(N)return!1;var T=Jv(O,S);if(!T)return!0;if(T?x=O:(x=O==="v"?"h":"v",T=Jv(O,S)),!T)return!1;if(!r.current&&"changedTouches"in f&&(_||w)&&(r.current=x),!x)return!0;var A=r.current||x;return JE(A,y,f,A==="h"?_:w)},[]),u=P.useCallback(function(f){var y=f;if(!(!Go.length||Go[Go.length-1]!==o)){var v="deltaY"in y?e2(y):pc(y),h=t.current.filter(function(x){return x.name===y.type&&(x.target===y.target||y.target===x.shadowParent)&&eN(x.delta,v)})[0];if(h&&h.should){y.cancelable&&y.preventDefault();return}if(!h){var _=(i.current.shards||[]).map(t2).filter(Boolean).filter(function(x){return x.contains(y.target)}),w=_.length>0?s(y,_[0]):!i.current.noIsolation;w&&y.cancelable&&y.preventDefault()}}},[]),l=P.useCallback(function(f,y,v,h){var _={name:f,delta:y,target:v,should:h,shadowParent:aN(v)};t.current.push(_),setTimeout(function(){t.current=t.current.filter(function(w){return w!==_})},1)},[]),p=P.useCallback(function(f){n.current=pc(f),r.current=void 0},[]),c=P.useCallback(function(f){l(f.type,e2(f),f.target,s(f,e.lockRef.current))},[]),m=P.useCallback(function(f){l(f.type,pc(f),f.target,s(f,e.lockRef.current))},[]);P.useEffect(function(){return Go.push(o),e.setCallbacks({onScrollCapture:c,onWheelCapture:c,onTouchMoveCapture:m}),document.addEventListener("wheel",u,Ho),document.addEventListener("touchmove",u,Ho),document.addEventListener("touchstart",p,Ho),function(){Go=Go.filter(function(f){return f!==o}),document.removeEventListener("wheel",u,Ho),document.removeEventListener("touchmove",u,Ho),document.removeEventListener("touchstart",p,Ho)}},[]);var d=e.removeScrollBar,g=e.inert;return P.createElement(P.Fragment,null,g?P.createElement(o,{styles:tN(a)}):null,d?P.createElement(WE,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function aN(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}const oN=RE(l_,rN);var f_=P.forwardRef(function(e,t){return P.createElement(Y0,rr({},e,{ref:t,sideCar:oN}))});f_.classNames=Y0.classNames;var iN=[" ","Enter","ArrowUp","ArrowDown"],sN=[" ","Enter"],So="Select",[Q0,Z0,uN]=A8(So),[ys]=fs(So,[uN,X0]),J0=X0(),[lN,$a]=ys(So),[cN,pN]=ys(So),v_=e=>{const{__scopeSelect:t,children:n,open:r,defaultOpen:a,onOpenChange:o,value:i,defaultValue:s,onValueChange:u,dir:l,name:p,autoComplete:c,disabled:m,required:d,form:g}=e,f=J0(t),[y,v]=P.useState(null),[h,_]=P.useState(null),[w,x]=P.useState(!1),S=U4(l),[O,k]=xp({prop:r,defaultProp:a??!1,onChange:o,caller:So}),[C,N]=xp({prop:i,defaultProp:s,onChange:u,caller:So}),T=P.useRef(null),A=y?g||!!y.closest("form"):!0,[$,R]=P.useState(new Set),q=Array.from($).map(M=>M.props.value).join(";");return b.jsx(iE,{...f,children:b.jsxs(lN,{required:d,scope:t,trigger:y,onTriggerChange:v,valueNode:h,onValueNodeChange:_,valueNodeHasChildren:w,onValueNodeHasChildrenChange:x,contentId:jl(),value:C,onValueChange:N,open:O,onOpenChange:k,dir:S,triggerPointerDownPosRef:T,disabled:m,children:[b.jsx(Q0.Provider,{scope:t,children:b.jsx(cN,{scope:e.__scopeSelect,onNativeOptionAdd:P.useCallback(M=>{R(D=>new Set(D).add(M))},[]),onNativeOptionRemove:P.useCallback(M=>{R(D=>{const j=new Set(D);return j.delete(M),j})},[]),children:n})}),A?b.jsxs(L_,{"aria-hidden":!0,required:d,tabIndex:-1,name:p,autoComplete:c,value:C,onChange:M=>N(M.target.value),disabled:m,form:g,children:[C===void 0?b.jsx("option",{value:""}):null,Array.from($)]},q):null]})})};v_.displayName=So;var h_="SelectTrigger",y_=P.forwardRef((e,t)=>{const{__scopeSelect:n,disabled:r=!1,...a}=e,o=J0(n),i=$a(h_,n),s=i.disabled||r,u=Qe(t,i.onTriggerChange),l=Z0(n),p=P.useRef("touch"),[c,m,d]=G_(f=>{const y=l().filter(_=>!_.disabled),v=y.find(_=>_.value===i.value),h=B_(y,f,v);h!==void 0&&i.onValueChange(h.value)}),g=f=>{s||(i.onOpenChange(!0),d()),f&&(i.triggerPointerDownPosRef.current={x:Math.round(f.pageX),y:Math.round(f.pageY)})};return b.jsx(e_,{asChild:!0,...o,children:b.jsx(Ee.button,{type:"button",role:"combobox","aria-controls":i.contentId,"aria-expanded":i.open,"aria-required":i.required,"aria-autocomplete":"none",dir:i.dir,"data-state":i.open?"open":"closed",disabled:s,"data-disabled":s?"":void 0,"data-placeholder":H_(i.value)?"":void 0,...a,ref:u,onClick:de(a.onClick,f=>{f.currentTarget.focus(),p.current!=="mouse"&&g(f)}),onPointerDown:de(a.onPointerDown,f=>{p.current=f.pointerType;const y=f.target;y.hasPointerCapture(f.pointerId)&&y.releasePointerCapture(f.pointerId),f.button===0&&f.ctrlKey===!1&&f.pointerType==="mouse"&&(g(f),f.preventDefault())}),onKeyDown:de(a.onKeyDown,f=>{const y=c.current!=="";!(f.ctrlKey||f.altKey||f.metaKey)&&f.key.length===1&&m(f.key),!(y&&f.key===" ")&&iN.includes(f.key)&&(g(),f.preventDefault())})})})});y_.displayName=h_;var g_="SelectValue",__=P.forwardRef((e,t)=>{const{__scopeSelect:n,className:r,style:a,children:o,placeholder:i="",...s}=e,u=$a(g_,n),{onValueNodeHasChildrenChange:l}=u,p=o!==void 0,c=Qe(t,u.onValueNodeChange);return jt(()=>{l(p)},[l,p]),b.jsx(Ee.span,{...s,ref:c,style:{pointerEvents:"none"},children:H_(u.value)?b.jsx(b.Fragment,{children:i}):o})});__.displayName=g_;var mN="SelectIcon",x_=P.forwardRef((e,t)=>{const{__scopeSelect:n,children:r,...a}=e;return b.jsx(Ee.span,{"aria-hidden":!0,...a,ref:t,children:r||"▼"})});x_.displayName=mN;var dN="SelectPortal",w_=e=>b.jsx(r_,{asChild:!0,...e});w_.displayName=dN;var Po="SelectContent",b_=P.forwardRef((e,t)=>{const n=$a(Po,e.__scopeSelect),[r,a]=P.useState();if(jt(()=>{a(new DocumentFragment)},[]),!n.open){const o=r;return o?ds.createPortal(b.jsx(S_,{scope:e.__scopeSelect,children:b.jsx(Q0.Slot,{scope:e.__scopeSelect,children:b.jsx("div",{children:e.children})})}),o):null}return b.jsx(P_,{...e,ref:t})});b_.displayName=Po;var An=10,[S_,Ma]=ys(Po),fN="SelectContentImpl",vN=uE("SelectContent.RemoveScroll"),P_=P.forwardRef((e,t)=>{const{__scopeSelect:n,position:r="item-aligned",onCloseAutoFocus:a,onEscapeKeyDown:o,onPointerDownOutside:i,side:s,sideOffset:u,align:l,alignOffset:p,arrowPadding:c,collisionBoundary:m,collisionPadding:d,sticky:g,hideWhenDetached:f,avoidCollisions:y,...v}=e,h=$a(Po,n),[_,w]=P.useState(null),[x,S]=P.useState(null),O=Qe(t,J=>w(J)),[k,C]=P.useState(null),[N,T]=P.useState(null),A=Z0(n),[$,R]=P.useState(!1),q=P.useRef(!1);P.useEffect(()=>{if(_)return SE(_)},[_]),IC();const M=P.useCallback(J=>{const[ue,...W]=A().map(L=>L.ref.current),[K]=W.slice(-1),X=document.activeElement;for(const L of J)if(L===X||(L==null||L.scrollIntoView({block:"nearest"}),L===ue&&x&&(x.scrollTop=0),L===K&&x&&(x.scrollTop=x.scrollHeight),L==null||L.focus(),document.activeElement!==X))return},[A,x]),D=P.useCallback(()=>M([k,_]),[M,k,_]);P.useEffect(()=>{$&&D()},[$,D]);const{onOpenChange:j,triggerPointerDownPosRef:I}=h;P.useEffect(()=>{if(_){let J={x:0,y:0};const ue=K=>{var X,L;J={x:Math.abs(Math.round(K.pageX)-(((X=I.current)==null?void 0:X.x)??0)),y:Math.abs(Math.round(K.pageY)-(((L=I.current)==null?void 0:L.y)??0))}},W=K=>{J.x<=10&&J.y<=10?K.preventDefault():_.contains(K.target)||j(!1),document.removeEventListener("pointermove",ue),I.current=null};return I.current!==null&&(document.addEventListener("pointermove",ue),document.addEventListener("pointerup",W,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",ue),document.removeEventListener("pointerup",W,{capture:!0})}}},[_,j,I]),P.useEffect(()=>{const J=()=>j(!1);return window.addEventListener("blur",J),window.addEventListener("resize",J),()=>{window.removeEventListener("blur",J),window.removeEventListener("resize",J)}},[j]);const[B,U]=G_(J=>{const ue=A().filter(X=>!X.disabled),W=ue.find(X=>X.ref.current===document.activeElement),K=B_(ue,J,W);K&&setTimeout(()=>K.ref.current.focus())}),F=P.useCallback((J,ue,W)=>{const K=!q.current&&!W;(h.value!==void 0&&h.value===ue||K)&&(C(J),K&&(q.current=!0))},[h.value]),Z=P.useCallback(()=>_==null?void 0:_.focus(),[_]),ie=P.useCallback((J,ue,W)=>{const K=!q.current&&!W;(h.value!==void 0&&h.value===ue||K)&&T(J)},[h.value]),he=r==="popper"?s3:O_,be=he===s3?{side:s,sideOffset:u,align:l,alignOffset:p,arrowPadding:c,collisionBoundary:m,collisionPadding:d,sticky:g,hideWhenDetached:f,avoidCollisions:y}:{};return b.jsx(S_,{scope:n,content:_,viewport:x,onViewportChange:S,itemRefCallback:F,selectedItem:k,onItemLeave:Z,itemTextRefCallback:ie,focusSelectedItem:D,selectedItemText:N,position:r,isPositioned:$,searchRef:B,children:b.jsx(f_,{as:vN,allowPinchZoom:!0,children:b.jsx(T8,{asChild:!0,trapped:h.open,onMountAutoFocus:J=>{J.preventDefault()},onUnmountAutoFocus:de(a,J=>{var ue;(ue=h.trigger)==null||ue.focus({preventScroll:!0}),J.preventDefault()}),children:b.jsx(W4,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:o,onPointerDownOutside:i,onFocusOutside:J=>J.preventDefault(),onDismiss:()=>h.onOpenChange(!1),children:b.jsx(he,{role:"listbox",id:h.contentId,"data-state":h.open?"open":"closed",dir:h.dir,onContextMenu:J=>J.preventDefault(),...v,...be,onPlaced:()=>R(!0),ref:O,style:{display:"flex",flexDirection:"column",outline:"none",...v.style},onKeyDown:de(v.onKeyDown,J=>{const ue=J.ctrlKey||J.altKey||J.metaKey;if(J.key==="Tab"&&J.preventDefault(),!ue&&J.key.length===1&&U(J.key),["ArrowUp","ArrowDown","Home","End"].includes(J.key)){let K=A().filter(X=>!X.disabled).map(X=>X.ref.current);if(["ArrowUp","End"].includes(J.key)&&(K=K.slice().reverse()),["ArrowUp","ArrowDown"].includes(J.key)){const X=J.target,L=K.indexOf(X);K=K.slice(L+1)}setTimeout(()=>M(K)),J.preventDefault()}})})})})})})});P_.displayName=fN;var hN="SelectItemAlignedPosition",O_=P.forwardRef((e,t)=>{const{__scopeSelect:n,onPlaced:r,...a}=e,o=$a(Po,n),i=Ma(Po,n),[s,u]=P.useState(null),[l,p]=P.useState(null),c=Qe(t,O=>p(O)),m=Z0(n),d=P.useRef(!1),g=P.useRef(!0),{viewport:f,selectedItem:y,selectedItemText:v,focusSelectedItem:h}=i,_=P.useCallback(()=>{if(o.trigger&&o.valueNode&&s&&l&&f&&y&&v){const O=o.trigger.getBoundingClientRect(),k=l.getBoundingClientRect(),C=o.valueNode.getBoundingClientRect(),N=v.getBoundingClientRect();if(o.dir!=="rtl"){const X=N.left-k.left,L=C.left-X,pe=O.left-L,re=O.width+pe,Re=Math.max(re,k.width),$e=window.innerWidth-An,Ze=Nv(L,[An,Math.max(An,$e-Re)]);s.style.minWidth=re+"px",s.style.left=Ze+"px"}else{const X=k.right-N.right,L=window.innerWidth-C.right-X,pe=window.innerWidth-O.right-L,re=O.width+pe,Re=Math.max(re,k.width),$e=window.innerWidth-An,Ze=Nv(L,[An,Math.max(An,$e-Re)]);s.style.minWidth=re+"px",s.style.right=Ze+"px"}const T=m(),A=window.innerHeight-An*2,$=f.scrollHeight,R=window.getComputedStyle(l),q=parseInt(R.borderTopWidth,10),M=parseInt(R.paddingTop,10),D=parseInt(R.borderBottomWidth,10),j=parseInt(R.paddingBottom,10),I=q+M+$+j+D,B=Math.min(y.offsetHeight*5,I),U=window.getComputedStyle(f),F=parseInt(U.paddingTop,10),Z=parseInt(U.paddingBottom,10),ie=O.top+O.height/2-An,he=A-ie,be=y.offsetHeight/2,J=y.offsetTop+be,ue=q+M+J,W=I-ue;if(ue<=ie){const X=T.length>0&&y===T[T.length-1].ref.current;s.style.bottom="0px";const L=l.clientHeight-f.offsetTop-f.offsetHeight,pe=Math.max(he,be+(X?Z:0)+L+D),re=ue+pe;s.style.height=re+"px"}else{const X=T.length>0&&y===T[0].ref.current;s.style.top="0px";const pe=Math.max(ie,q+f.offsetTop+(X?F:0)+be)+W;s.style.height=pe+"px",f.scrollTop=ue-ie+f.offsetTop}s.style.margin=`${An}px 0`,s.style.minHeight=B+"px",s.style.maxHeight=A+"px",r==null||r(),requestAnimationFrame(()=>d.current=!0)}},[m,o.trigger,o.valueNode,s,l,f,y,v,o.dir,r]);jt(()=>_(),[_]);const[w,x]=P.useState();jt(()=>{l&&x(window.getComputedStyle(l).zIndex)},[l]);const S=P.useCallback(O=>{O&&g.current===!0&&(_(),h==null||h(),g.current=!1)},[_,h]);return b.jsx(gN,{scope:n,contentWrapper:s,shouldExpandOnScrollRef:d,onScrollButtonChange:S,children:b.jsx("div",{ref:u,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:w},children:b.jsx(Ee.div,{...a,ref:c,style:{boxSizing:"border-box",maxHeight:"100%",...a.style}})})})});O_.displayName=hN;var yN="SelectPopperPosition",s3=P.forwardRef((e,t)=>{const{__scopeSelect:n,align:r="start",collisionPadding:a=An,...o}=e,i=J0(n);return b.jsx(t_,{...i,...o,ref:t,align:r,collisionPadding:a,style:{boxSizing:"border-box",...o.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});s3.displayName=yN;var[gN,t9]=ys(Po,{}),u3="SelectViewport",k_=P.forwardRef((e,t)=>{const{__scopeSelect:n,nonce:r,...a}=e,o=Ma(u3,n),i=t9(u3,n),s=Qe(t,o.onViewportChange),u=P.useRef(0);return b.jsxs(b.Fragment,{children:[b.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:r}),b.jsx(Q0.Slot,{scope:n,children:b.jsx(Ee.div,{"data-radix-select-viewport":"",role:"presentation",...a,ref:s,style:{position:"relative",flex:1,overflow:"hidden auto",...a.style},onScroll:de(a.onScroll,l=>{const p=l.currentTarget,{contentWrapper:c,shouldExpandOnScrollRef:m}=i;if(m!=null&&m.current&&c){const d=Math.abs(u.current-p.scrollTop);if(d>0){const g=window.innerHeight-An*2,f=parseFloat(c.style.minHeight),y=parseFloat(c.style.height),v=Math.max(f,y);if(v0?w:0,c.style.justifyContent="flex-end")}}}u.current=p.scrollTop})})})]})});k_.displayName=u3;var C_="SelectGroup",[_N,xN]=ys(C_),wN=P.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,a=jl();return b.jsx(_N,{scope:n,id:a,children:b.jsx(Ee.div,{role:"group","aria-labelledby":a,...r,ref:t})})});wN.displayName=C_;var A_="SelectLabel",E_=P.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,a=xN(A_,n);return b.jsx(Ee.div,{id:a.id,...r,ref:t})});E_.displayName=A_;var wp="SelectItem",[bN,N_]=ys(wp),T_=P.forwardRef((e,t)=>{const{__scopeSelect:n,value:r,disabled:a=!1,textValue:o,...i}=e,s=$a(wp,n),u=Ma(wp,n),l=s.value===r,[p,c]=P.useState(o??""),[m,d]=P.useState(!1),g=Qe(t,h=>{var _;return(_=u.itemRefCallback)==null?void 0:_.call(u,h,r,a)}),f=jl(),y=P.useRef("touch"),v=()=>{a||(s.onValueChange(r),s.onOpenChange(!1))};if(r==="")throw new Error("A must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return b.jsx(bN,{scope:n,value:r,disabled:a,textId:f,isSelected:l,onItemTextChange:P.useCallback(h=>{c(_=>_||((h==null?void 0:h.textContent)??"").trim())},[]),children:b.jsx(Q0.ItemSlot,{scope:n,value:r,disabled:a,textValue:p,children:b.jsx(Ee.div,{role:"option","aria-labelledby":f,"data-highlighted":m?"":void 0,"aria-selected":l&&m,"data-state":l?"checked":"unchecked","aria-disabled":a||void 0,"data-disabled":a?"":void 0,tabIndex:a?void 0:-1,...i,ref:g,onFocus:de(i.onFocus,()=>d(!0)),onBlur:de(i.onBlur,()=>d(!1)),onClick:de(i.onClick,()=>{y.current!=="mouse"&&v()}),onPointerUp:de(i.onPointerUp,()=>{y.current==="mouse"&&v()}),onPointerDown:de(i.onPointerDown,h=>{y.current=h.pointerType}),onPointerMove:de(i.onPointerMove,h=>{var _;y.current=h.pointerType,a?(_=u.onItemLeave)==null||_.call(u):y.current==="mouse"&&h.currentTarget.focus({preventScroll:!0})}),onPointerLeave:de(i.onPointerLeave,h=>{var _;h.currentTarget===document.activeElement&&((_=u.onItemLeave)==null||_.call(u))}),onKeyDown:de(i.onKeyDown,h=>{var w;((w=u.searchRef)==null?void 0:w.current)!==""&&h.key===" "||(sN.includes(h.key)&&v(),h.key===" "&&h.preventDefault())})})})})});T_.displayName=wp;var ru="SelectItemText",j_=P.forwardRef((e,t)=>{const{__scopeSelect:n,className:r,style:a,...o}=e,i=$a(ru,n),s=Ma(ru,n),u=N_(ru,n),l=pN(ru,n),[p,c]=P.useState(null),m=Qe(t,v=>c(v),u.onItemTextChange,v=>{var h;return(h=s.itemTextRefCallback)==null?void 0:h.call(s,v,u.value,u.disabled)}),d=p==null?void 0:p.textContent,g=P.useMemo(()=>b.jsx("option",{value:u.value,disabled:u.disabled,children:d},u.value),[u.disabled,u.value,d]),{onNativeOptionAdd:f,onNativeOptionRemove:y}=l;return jt(()=>(f(g),()=>y(g)),[f,y,g]),b.jsxs(b.Fragment,{children:[b.jsx(Ee.span,{id:u.textId,...o,ref:m}),u.isSelected&&i.valueNode&&!i.valueNodeHasChildren?ds.createPortal(o.children,i.valueNode):null]})});j_.displayName=ru;var R_="SelectItemIndicator",$_=P.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e;return N_(R_,n).isSelected?b.jsx(Ee.span,{"aria-hidden":!0,...r,ref:t}):null});$_.displayName=R_;var l3="SelectScrollUpButton",M_=P.forwardRef((e,t)=>{const n=Ma(l3,e.__scopeSelect),r=t9(l3,e.__scopeSelect),[a,o]=P.useState(!1),i=Qe(t,r.onScrollButtonChange);return jt(()=>{if(n.viewport&&n.isPositioned){let s=function(){const l=u.scrollTop>0;o(l)};const u=n.viewport;return s(),u.addEventListener("scroll",s),()=>u.removeEventListener("scroll",s)}},[n.viewport,n.isPositioned]),a?b.jsx(I_,{...e,ref:i,onAutoScroll:()=>{const{viewport:s,selectedItem:u}=n;s&&u&&(s.scrollTop=s.scrollTop-u.offsetHeight)}}):null});M_.displayName=l3;var c3="SelectScrollDownButton",q_=P.forwardRef((e,t)=>{const n=Ma(c3,e.__scopeSelect),r=t9(c3,e.__scopeSelect),[a,o]=P.useState(!1),i=Qe(t,r.onScrollButtonChange);return jt(()=>{if(n.viewport&&n.isPositioned){let s=function(){const l=u.scrollHeight-u.clientHeight,p=Math.ceil(u.scrollTop)u.removeEventListener("scroll",s)}},[n.viewport,n.isPositioned]),a?b.jsx(I_,{...e,ref:i,onAutoScroll:()=>{const{viewport:s,selectedItem:u}=n;s&&u&&(s.scrollTop=s.scrollTop+u.offsetHeight)}}):null});q_.displayName=c3;var I_=P.forwardRef((e,t)=>{const{__scopeSelect:n,onAutoScroll:r,...a}=e,o=Ma("SelectScrollButton",n),i=P.useRef(null),s=Z0(n),u=P.useCallback(()=>{i.current!==null&&(window.clearInterval(i.current),i.current=null)},[]);return P.useEffect(()=>()=>u(),[u]),jt(()=>{var p;const l=s().find(c=>c.ref.current===document.activeElement);(p=l==null?void 0:l.ref.current)==null||p.scrollIntoView({block:"nearest"})},[s]),b.jsx(Ee.div,{"aria-hidden":!0,...a,ref:t,style:{flexShrink:0,...a.style},onPointerDown:de(a.onPointerDown,()=>{i.current===null&&(i.current=window.setInterval(r,50))}),onPointerMove:de(a.onPointerMove,()=>{var l;(l=o.onItemLeave)==null||l.call(o),i.current===null&&(i.current=window.setInterval(r,50))}),onPointerLeave:de(a.onPointerLeave,()=>{u()})})}),SN="SelectSeparator",D_=P.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e;return b.jsx(Ee.div,{"aria-hidden":!0,...r,ref:t})});D_.displayName=SN;var p3="SelectArrow",PN=P.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,a=J0(n),o=$a(p3,n),i=Ma(p3,n);return o.open&&i.position==="popper"?b.jsx(n_,{...a,...r,ref:t}):null});PN.displayName=p3;var ON="SelectBubbleInput",L_=P.forwardRef(({__scopeSelect:e,value:t,...n},r)=>{const a=P.useRef(null),o=Qe(r,a),i=yE(t);return P.useEffect(()=>{const s=a.current;if(!s)return;const u=window.HTMLSelectElement.prototype,p=Object.getOwnPropertyDescriptor(u,"value").set;if(i!==t&&p){const c=new Event("change",{bubbles:!0});p.call(s,t),s.dispatchEvent(c)}},[i,t]),b.jsx(Ee.select,{...n,style:{...a_,...n.style},ref:o,defaultValue:t})});L_.displayName=ON;function H_(e){return e===""||e===void 0}function G_(e){const t=Aa(e),n=P.useRef(""),r=P.useRef(0),a=P.useCallback(i=>{const s=n.current+i;t(s),function u(l){n.current=l,window.clearTimeout(r.current),l!==""&&(r.current=window.setTimeout(()=>u(""),1e3))}(s)},[t]),o=P.useCallback(()=>{n.current="",window.clearTimeout(r.current)},[]);return P.useEffect(()=>()=>window.clearTimeout(r.current),[]),[n,a,o]}function B_(e,t,n){const a=t.length>1&&Array.from(t).every(l=>l===t[0])?t[0]:t,o=n?e.indexOf(n):-1;let i=kN(e,Math.max(o,0));a.length===1&&(i=i.filter(l=>l!==n));const u=i.find(l=>l.textValue.toLowerCase().startsWith(a.toLowerCase()));return u!==n?u:void 0}function kN(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var CN=v_,F_=y_,AN=__,EN=x_,NN=w_,z_=b_,TN=k_,U_=E_,W_=T_,jN=j_,RN=$_,V_=M_,K_=q_,X_=D_;/** +`)},sj=0,ji=[];function uj(e){var t=R.useRef([]),n=R.useRef([0,0]),r=R.useRef(),a=R.useState(sj++)[0],i=R.useState(LP)[0],u=R.useRef(e);R.useEffect(function(){u.current=e},[e]),R.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(a));var g=Eq([e.lockRef.current],(e.shards||[]).map(M7),!0).filter(Boolean);return g.forEach(function(y){return y.classList.add("allow-interactivity-".concat(a))}),function(){document.body.classList.remove("block-interactivity-".concat(a)),g.forEach(function(y){return y.classList.remove("allow-interactivity-".concat(a))})}}},[e.inert,e.lockRef.current,e.shards]);var l=R.useCallback(function(g,y){if("touches"in g&&g.touches.length===2||g.type==="wheel"&&g.ctrlKey)return!u.current.allowPinchZoom;var b=wp(g),O=n.current,C="deltaX"in g?g.deltaX:O[0]-b[0],k="deltaY"in g?g.deltaY:O[1]-b[1],P,A=g.target,T=Math.abs(C)>Math.abs(k)?"h":"v";if("touches"in g&&T==="h"&&A.type==="range")return!1;var q=window.getSelection(),j=q&&q.anchorNode,B=j?j===A||j.contains(A):!1;if(B)return!1;var $=q7(T,A);if(!$)return!0;if($?P=T:(P=T==="v"?"h":"v",$=q7(T,A)),!$)return!1;if(!r.current&&"changedTouches"in g&&(C||k)&&(r.current=P),!P)return!0;var M=r.current||P;return aj(M,y,g,M==="h"?C:k)},[]),c=R.useCallback(function(g){var y=g;if(!(!ji.length||ji[ji.length-1]!==i)){var b="deltaY"in y?j7(y):wp(y),O=t.current.filter(function(P){return P.name===y.type&&(P.target===y.target||y.target===P.shadowParent)&&oj(P.delta,b)})[0];if(O&&O.should){y.cancelable&&y.preventDefault();return}if(!O){var C=(u.current.shards||[]).map(M7).filter(Boolean).filter(function(P){return P.contains(y.target)}),k=C.length>0?l(y,C[0]):!u.current.noIsolation;k&&y.cancelable&&y.preventDefault()}}},[]),m=R.useCallback(function(g,y,b,O){var C={name:g,delta:y,target:b,should:O,shadowParent:lj(b)};t.current.push(C),setTimeout(function(){t.current=t.current.filter(function(k){return k!==C})},1)},[]),f=R.useCallback(function(g){n.current=wp(g),r.current=void 0},[]),d=R.useCallback(function(g){m(g.type,j7(g),g.target,l(g,e.lockRef.current))},[]),v=R.useCallback(function(g){m(g.type,wp(g),g.target,l(g,e.lockRef.current))},[]);R.useEffect(function(){return ji.push(i),e.setCallbacks({onScrollCapture:d,onWheelCapture:d,onTouchMoveCapture:v}),document.addEventListener("wheel",c,qi),document.addEventListener("touchmove",c,qi),document.addEventListener("touchstart",f,qi),function(){ji=ji.filter(function(g){return g!==i}),document.removeEventListener("wheel",c,qi),document.removeEventListener("touchmove",c,qi),document.removeEventListener("touchstart",f,qi)}},[]);var _=e.removeScrollBar,w=e.inert;return R.createElement(R.Fragment,null,w?R.createElement(i,{styles:ij(a)}):null,_?R.createElement(Qq,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function lj(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}const cj=$q($P,uj);var BP=R.forwardRef(function(e,t){return R.createElement(r0,Er({},e,{ref:t,sideCar:cj}))});BP.classNames=r0.classNames;var pj=Object.defineProperty,$e=(e,t)=>pj(e,"name",{value:t,configurable:!0}),mj=[" ","Enter","ArrowUp","ArrowDown"],dj=[" ","Enter"],is="Select",[a0,o0,fj]=eP(is),[Jo]=Is(is,[fj,t0]),Vv=t0(),[vj,oo]=Jo(is),[hj,yj]=Jo(is);function zP(e){const{__scopeSelect:t,children:n,open:r,defaultOpen:a,onOpenChange:i,value:u,defaultValue:l,onValueChange:c,dir:m,name:f,autoComplete:d,disabled:v,required:_,form:w,internal_do_not_use_render:g}=e,y=Vv(t),[b,O]=R.useState(null),[C,k]=R.useState(null),[P,A]=R.useState(!1),T=Dv(m),[q,j]=sl({prop:r,defaultProp:a??!1,onChange:i,caller:is}),[B,$]=sl({prop:u,defaultProp:l,onChange:c,caller:is}),M=R.useRef(null),H=R.useRef(B);R.useEffect(()=>{const W=w?b==null?void 0:b.ownerDocument.getElementById(w):b==null?void 0:b.form;if(W instanceof HTMLFormElement){const oe=$e(()=>$(H.current),"reset");return W.addEventListener("reset",oe),()=>W.removeEventListener("reset",oe)}},[w,b,$]);const F=b?!!w||!!b.closest("form"):!0,[V,K]=R.useState(new Set),J=X1(),z=Array.from(V).map(W=>W.props.value).join(";"),Y=R.useCallback(W=>{K(oe=>new Set(oe).add(W))},[]),Q=R.useCallback(W=>{K(oe=>{const me=new Set(oe);return me.delete(W),me})},[]),D={required:_,trigger:b,onTriggerChange:O,valueNode:C,onValueNodeChange:k,valueNodeHasChildren:P,onValueNodeHasChildrenChange:A,contentId:J,value:B,onValueChange:$,open:q,onOpenChange:j,dir:T,triggerPointerDownPosRef:M,disabled:v,name:f,autoComplete:d,form:w,nativeOptions:V,nativeSelectKey:z,isFormControl:F};return E.jsx(cq,{...y,children:E.jsx(vj,{scope:t,...D,children:E.jsx(a0.Provider,{scope:t,children:E.jsx(hj,{scope:t,onNativeOptionAdd:Y,onNativeOptionRemove:Q,children:tO(g)?g(D):n})})})})}$e(zP,"SelectProvider");var _j=$e(e=>{const{__scopeSelect:t,children:n,...r}=e;return E.jsx(zP,{__scopeSelect:t,...r,internal_do_not_use_render:({isFormControl:a})=>E.jsxs(E.Fragment,{children:[n,a?E.jsx(Gj,{__scopeSelect:t}):null]})})},"Select"),gj="SelectTrigger",UP=R.forwardRef($e(function(t,n){const{__scopeSelect:r,disabled:a=!1,...i}=t,u=Vv(r),l=oo(gj,r),c=l.disabled||a,m=Nt(n,l.onTriggerChange),f=o0(r),d=R.useRef("touch"),[v,_,w]=Xv(y=>{const b=f().filter(k=>!k.disabled),O=b.find(k=>k.value===l.value),C=Yv(b,y,O);C!==void 0&&l.onValueChange(C.value)}),g=$e(y=>{c||(l.onOpenChange(!0),w()),y&&(l.triggerPointerDownPosRef.current={x:Math.round(y.pageX),y:Math.round(y.pageY)})},"handleOpen");return E.jsx(pq,{asChild:!0,...u,children:E.jsx(mt.button,{type:"button",role:"combobox","aria-controls":l.open?l.contentId:void 0,"aria-expanded":l.open,"aria-required":l.required,"aria-autocomplete":"none",dir:l.dir,"data-state":l.open?"open":"closed",disabled:c,"data-disabled":c?"":void 0,"data-placeholder":Ql(l.value)?"":void 0,...i,ref:m,onClick:Ve(i.onClick,y=>{y.currentTarget.focus(),d.current!=="mouse"&&g(y)}),onPointerDown:Ve(i.onPointerDown,y=>{d.current=y.pointerType;const b=y.target;b.hasPointerCapture(y.pointerId)&&b.releasePointerCapture(y.pointerId),y.button===0&&y.ctrlKey===!1&&y.pointerType==="mouse"&&(g(y),y.preventDefault())}),onKeyDown:Ve(i.onKeyDown,y=>{const b=v.current!=="";!(y.ctrlKey||y.altKey||y.metaKey)&&y.key.length===1&&_(y.key),!(b&&y.key===" ")&&mj.includes(y.key)&&(g(),y.preventDefault())})})})},"SelectTrigger")),xj="SelectValue",wj=R.forwardRef($e(function(t,n){const{__scopeSelect:r,className:a,style:i,children:u,placeholder:l="",...c}=t,m=oo(xj,r),{onValueNodeHasChildrenChange:f}=m,d=u!==void 0,v=Nt(n,m.onValueNodeChange);Pt(()=>{f(d)},[f,d]);const _=Ql(m.value);return E.jsx(mt.span,{...c,asChild:_?!1:c.asChild,ref:v,style:{pointerEvents:"none"},children:E.jsx(R.Fragment,{children:_?l:u},_?"placeholder":"value")})},"SelectValue")),bj=R.forwardRef($e(function(t,n){const{__scopeSelect:r,children:a,...i}=t;return E.jsx(mt.span,{"aria-hidden":!0,...i,ref:n,children:a||"▼"})},"SelectIcon")),Sj="SelectPortal",[Pj,Oj]=Jo(Sj,{forceMount:void 0}),kj=$e(e=>{const{__scopeSelect:t,forceMount:n,...r}=e;return E.jsx(Pj,{scope:e.__scopeSelect,forceMount:n,children:E.jsx(fq,{asChild:!0,...r})})},"SelectPortal"),Wo="SelectContent",WP=R.forwardRef($e(function(t,n){const r=Oj(Wo,t.__scopeSelect),{forceMount:a=r.forceMount,...i}=t,u=oo(Wo,t.__scopeSelect),[l,c]=R.useState();return Pt(()=>{c(new DocumentFragment)},[]),E.jsx(Wv,{present:a||u.open,children:({present:m})=>m?E.jsx(Ej,{...i,ref:n}):E.jsx(Cj,{...i,fragment:l})})},"SelectContent")),Cj=R.forwardRef($e(function(t,n){const{__scopeSelect:r,children:a,fragment:i}=t;return i?Xl.createPortal(E.jsx(VP,{scope:r,children:E.jsx(a0.Slot,{scope:r,children:E.jsx("div",{ref:n,children:a})})}),i):null},"SelectContentFragment")),ir=10,[VP,ei]=Jo(Wo),Aj=al("SelectContent.RemoveScroll"),Ej=R.forwardRef($e(function(t,n){const{__scopeSelect:r}=t,{position:a="item-aligned",onCloseAutoFocus:i,onEscapeKeyDown:u,onPointerDownOutside:l,side:c,sideOffset:m,align:f,alignOffset:d,arrowPadding:v,collisionBoundary:_,collisionPadding:w,sticky:g,hideWhenDetached:y,avoidCollisions:b,...O}=t,C=oo(Wo,r),[k,P]=R.useState(null),[A,T]=R.useState(null),q=Nt(n,P),[j,B]=R.useState(null),[$,M]=R.useState(null),H=o0(r),[F,V]=R.useState(!1),K=R.useRef(!1);R.useEffect(()=>{if(k)return Aq(k)},[k]),UT();const J=R.useCallback(pe=>{const[ae,...de]=H().map(be=>be.ref.current),[fe]=de.slice(-1),te=document.activeElement;for(const be of pe)if(be===te||(be==null||be.scrollIntoView({block:"nearest"}),be===ae&&A&&(A.scrollTop=0),be===fe&&A&&(A.scrollTop=A.scrollHeight),be==null||be.focus(),document.activeElement!==te))return},[H,A]),z=R.useCallback(()=>J([j,k]),[J,j,k]);R.useEffect(()=>{F&&z()},[F,z]);const{onOpenChange:Y,triggerPointerDownPosRef:Q}=C;R.useEffect(()=>{if(k){let pe={x:0,y:0};const ae=$e(fe=>{var te,be;pe={x:Math.abs(Math.round(fe.pageX)-(((te=Q.current)==null?void 0:te.x)??0)),y:Math.abs(Math.round(fe.pageY)-(((be=Q.current)==null?void 0:be.y)??0))}},"handlePointerMove"),de=$e(fe=>{pe.x<=10&&pe.y<=10?fe.preventDefault():fe.composedPath().includes(k)||Y(!1),document.removeEventListener("pointermove",ae),Q.current=null},"handlePointerUp");return Q.current!==null&&(document.addEventListener("pointermove",ae),document.addEventListener("pointerup",de,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",ae),document.removeEventListener("pointerup",de,{capture:!0})}}},[k,Y,Q]),R.useEffect(()=>{const pe=$e(()=>Y(!1),"close");return window.addEventListener("blur",pe),window.addEventListener("resize",pe),()=>{window.removeEventListener("blur",pe),window.removeEventListener("resize",pe)}},[Y]);const[D,W]=Xv(pe=>{const ae=H().filter(te=>!te.disabled),de=ae.find(te=>te.ref.current===document.activeElement),fe=Yv(ae,pe,de);fe&&setTimeout(()=>{var te;return(te=fe.ref.current)==null?void 0:te.focus()})}),oe=R.useCallback((pe,ae,de)=>{const fe=!K.current&&!de;(C.value!==void 0&&C.value===ae||fe)&&(B(pe),fe&&(K.current=!0))},[C.value]),me=R.useCallback(()=>k==null?void 0:k.focus(),[k]),ge=R.useCallback((pe,ae,de)=>{const fe=!K.current&&!de;(C.value!==void 0&&C.value===ae||fe)&&M(pe)},[C.value]),Se=a==="popper"?I7:Rj,qe=Se===I7?{side:c,sideOffset:m,align:f,alignOffset:d,arrowPadding:v,collisionBoundary:_,collisionPadding:w,sticky:g,hideWhenDetached:y,avoidCollisions:b}:{};return E.jsx(VP,{scope:r,content:k,viewport:A,onViewportChange:T,itemRefCallback:oe,selectedItem:j,onItemLeave:me,itemTextRefCallback:ge,focusSelectedItem:z,selectedItemText:$,position:a,isPositioned:F,searchRef:D,children:E.jsx(BP,{as:Aj,allowPinchZoom:!0,children:E.jsx(VT,{asChild:!0,trapped:C.open,onMountAutoFocus:pe=>{pe.preventDefault()},onUnmountAutoFocus:Ve(i,pe=>{var ae;(ae=C.trigger)==null||ae.focus({preventScroll:!0}),pe.preventDefault()}),children:E.jsx(nP,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:u,onPointerDownOutside:l,onFocusOutside:pe=>pe.preventDefault(),onDismiss:()=>C.onOpenChange(!1),children:E.jsx(Se,{role:"listbox",id:C.contentId,"data-state":C.open?"open":"closed",dir:C.dir,onContextMenu:pe=>pe.preventDefault(),...O,...qe,onPlaced:()=>V(!0),ref:q,style:{display:"flex",flexDirection:"column",outline:"none",...O.style},onKeyDown:Ve(O.onKeyDown,pe=>{const ae=pe.ctrlKey||pe.altKey||pe.metaKey;if(pe.key==="Tab"&&pe.preventDefault(),!ae&&pe.key.length===1&&W(pe.key),["ArrowUp","ArrowDown","Home","End"].includes(pe.key)){let fe=H().filter(te=>!te.disabled).map(te=>te.ref.current);if(["ArrowUp","End"].includes(pe.key)&&(fe=fe.slice().reverse()),["ArrowUp","ArrowDown"].includes(pe.key)){const te=pe.target,be=fe.indexOf(te);fe=fe.slice(be+1)}setTimeout(()=>J(fe)),pe.preventDefault()}})})})})})})},"SelectContentImpl")),Rj=R.forwardRef($e(function(t,n){const{__scopeSelect:r,onPlaced:a,...i}=t,u=oo(Wo,r),l=ei(Wo,r),[c,m]=R.useState(null),[f,d]=R.useState(null),v=Nt(n,d),_=o0(r),w=R.useRef(!1),g=R.useRef(!0),{viewport:y,selectedItem:b,selectedItemText:O,focusSelectedItem:C}=l,k=R.useCallback(()=>{if(u.trigger&&u.valueNode&&c&&f&&y&&b&&O){const q=u.trigger.getBoundingClientRect(),j=f.getBoundingClientRect(),B=u.valueNode.getBoundingClientRect(),$=O.getBoundingClientRect();if(u.dir!=="rtl"){const te=$.left-j.left,be=B.left-te,Ce=q.left-be,Le=q.width+Ce,ze=Math.max(Le,j.width),ot=window.innerWidth-ir,Gt=p7(be,[ir,Math.max(ir,ot-ze)]);c.style.minWidth=Le+"px",c.style.left=Gt+"px"}else{const te=j.right-$.right,be=window.innerWidth-B.right-te,Ce=window.innerWidth-q.right-be,Le=q.width+Ce,ze=Math.max(Le,j.width),ot=window.innerWidth-ir,Gt=p7(be,[ir,Math.max(ir,ot-ze)]);c.style.minWidth=Le+"px",c.style.right=Gt+"px"}const M=_(),H=window.innerHeight-ir*2,F=y.scrollHeight,V=window.getComputedStyle(f),K=parseInt(V.borderTopWidth,10),J=parseInt(V.paddingTop,10),z=parseInt(V.borderBottomWidth,10),Y=parseInt(V.paddingBottom,10),Q=K+J+F+Y+z,D=Math.min(b.offsetHeight*5,Q),W=window.getComputedStyle(y),oe=parseInt(W.paddingTop,10),me=parseInt(W.paddingBottom,10),ge=q.top+q.height/2-ir,Se=H-ge,qe=b.offsetHeight/2,pe=b.offsetTop+qe,ae=K+J+pe,de=Q-ae;if(ae<=ge){const te=M.length>0&&b===M[M.length-1].ref.current;c.style.bottom="0px";const be=f.clientHeight-y.offsetTop-y.offsetHeight,Ce=Math.max(Se,qe+(te?me:0)+be+z),Le=ae+Ce;c.style.height=Le+"px"}else{const te=M.length>0&&b===M[0].ref.current;c.style.top="0px";const Ce=Math.max(ge,K+y.offsetTop+(te?oe:0)+qe)+de;c.style.height=Ce+"px",y.scrollTop=ae-ge+y.offsetTop}c.style.margin=`${ir}px 0`,c.style.minHeight=D+"px",c.style.maxHeight=H+"px",a==null||a(),requestAnimationFrame(()=>w.current=!0)}},[_,u.trigger,u.valueNode,c,f,y,b,O,u.dir,a]);Pt(()=>k(),[k]);const[P,A]=R.useState();Pt(()=>{f&&A(window.getComputedStyle(f).zIndex)},[f]);const T=R.useCallback(q=>{q&&g.current===!0&&(k(),C==null||C(),g.current=!1)},[k,C]);return E.jsx(Tj,{scope:r,contentWrapper:c,shouldExpandOnScrollRef:w,onScrollButtonChange:T,children:E.jsx("div",{ref:m,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:P},children:E.jsx(mt.div,{...i,ref:v,style:{boxSizing:"border-box",maxHeight:"100%",...i.style}})})})},"SelectItemAlignedPosition")),I7=R.forwardRef($e(function(t,n){const{__scopeSelect:r,align:a="start",collisionPadding:i=ir,...u}=t,l=Vv(r);return E.jsx(CP,{...l,...u,ref:n,align:a,collisionPadding:i,style:{boxSizing:"border-box",...u.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})},"SelectPopperPosition")),[Tj,Kv]=Jo(Wo,{}),D7="SelectViewport",Nj=R.forwardRef($e(function(t,n){const{__scopeSelect:r,nonce:a,...i}=t,u=ei(D7,r),l=Kv(D7,r),c=Nt(n,u.onViewportChange),m=R.useRef(0);return E.jsxs(E.Fragment,{children:[E.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:a}),E.jsx(a0.Slot,{scope:r,children:E.jsx(mt.div,{"data-radix-select-viewport":"",role:"presentation",...i,ref:c,style:{position:"relative",flex:1,overflow:"hidden auto",...i.style},onScroll:Ve(i.onScroll,f=>{const d=f.currentTarget,{contentWrapper:v,shouldExpandOnScrollRef:_}=l;if(_!=null&&_.current&&v){const w=Math.abs(m.current-d.scrollTop);if(w>0){const g=window.innerHeight-ir*2,y=parseFloat(v.style.minHeight),b=parseFloat(v.style.height),O=Math.max(y,b);if(O0?P:0,v.style.justifyContent="flex-end")}}}m.current=d.scrollTop})})})]})},"SelectViewport")),qj="SelectGroup",[Ute,jj]=Jo(qj),Mj="SelectLabel",KP=R.forwardRef($e(function(t,n){const{__scopeSelect:r,...a}=t,i=jj(Mj,r);return E.jsx(mt.div,{id:i.id,...a,ref:n})},"SelectLabel")),i5="SelectItem",[Ij,XP]=Jo(i5),YP=R.forwardRef($e(function(t,n){const{__scopeSelect:r,value:a,disabled:i=!1,textValue:u,...l}=t,c=oo(i5,r),m=ei(i5,r),f=c.value===a,[d,v]=R.useState(u??""),[_,w]=R.useState(!1),g=$r(k=>{var P;return(P=m.itemRefCallback)==null?void 0:P.call(m,k,a,i)}),y=Nt(n,g),b=X1(),O=R.useRef("touch"),C=$e(()=>{i||(c.onValueChange(a),c.onOpenChange(!1))},"handleSelect");return E.jsx(Ij,{scope:r,value:a,disabled:i,textId:b,isSelected:f,onItemTextChange:R.useCallback(k=>{v(P=>P||((k==null?void 0:k.textContent)??"").trim())},[]),children:E.jsx(a0.ItemSlot,{scope:r,value:a,disabled:i,textValue:d,children:E.jsx(mt.div,{role:"option","aria-labelledby":b,"data-highlighted":_?"":void 0,"aria-selected":f&&_,"data-state":f?"checked":"unchecked","aria-disabled":i||void 0,"data-disabled":i?"":void 0,tabIndex:i?void 0:-1,...l,ref:y,onFocus:Ve(l.onFocus,()=>w(!0)),onBlur:Ve(l.onBlur,()=>w(!1)),onClick:Ve(l.onClick,()=>{O.current!=="mouse"&&C()}),onPointerUp:Ve(l.onPointerUp,()=>{O.current==="mouse"&&C()}),onPointerDown:Ve(l.onPointerDown,k=>{O.current=k.pointerType}),onPointerMove:Ve(l.onPointerMove,k=>{var P;O.current=k.pointerType,i?(P=m.onItemLeave)==null||P.call(m):O.current==="mouse"&&k.currentTarget.focus({preventScroll:!0})}),onPointerLeave:Ve(l.onPointerLeave,k=>{var P;k.currentTarget===document.activeElement&&((P=m.onItemLeave)==null||P.call(m))}),onKeyDown:Ve(l.onKeyDown,k=>{var A;i||k.target!==k.currentTarget||((A=m.searchRef)==null?void 0:A.current)!==""&&k.key===" "||(dj.includes(k.key)&&C(),k.key===" "&&k.preventDefault())})})})})},"SelectItem")),bp="SelectItemText",Dj=R.forwardRef($e(function(t,n){const{__scopeSelect:r,className:a,style:i,...u}=t,l=oo(bp,r),c=ei(bp,r),m=XP(bp,r),f=yj(bp,r),[d,v]=R.useState(null),_=$r(C=>{var k;return(k=c.itemTextRefCallback)==null?void 0:k.call(c,C,m.value,m.disabled)}),w=Nt(n,v,m.onItemTextChange,_),g=d==null?void 0:d.textContent,y=R.useMemo(()=>E.jsx("option",{value:m.value,disabled:m.disabled,children:g},m.value),[m.disabled,m.value,g]),{onNativeOptionAdd:b,onNativeOptionRemove:O}=f;return Pt(()=>(b(y),()=>O(y)),[b,O,y]),E.jsxs(E.Fragment,{children:[E.jsx(mt.span,{id:m.textId,...u,ref:w}),m.isSelected&&l.valueNode&&!l.valueNodeHasChildren&&!Ql(l.value)?Xl.createPortal(u.children,l.valueNode):null]})},"SelectItemText")),$j="SelectItemIndicator",Lj=R.forwardRef($e(function(t,n){const{__scopeSelect:r,...a}=t;return XP($j,r).isSelected?E.jsx(mt.span,{"aria-hidden":!0,...a,ref:n}):null},"SelectItemIndicator")),$7="SelectScrollUpButton",QP=R.forwardRef($e(function(t,n){const r=ei($7,t.__scopeSelect),a=Kv($7,t.__scopeSelect),[i,u]=R.useState(!1),l=Nt(n,a.onScrollButtonChange);return Pt(()=>{if(r.viewport&&r.isPositioned){let c=function(){const f=m.scrollTop>0;u(f)};$e(c,"handleScroll");const m=r.viewport;return c(),m.addEventListener("scroll",c),()=>m.removeEventListener("scroll",c)}},[r.viewport,r.isPositioned]),i?E.jsx(JP,{...t,ref:l,onAutoScroll:()=>{const{viewport:c,selectedItem:m}=r;c&&m&&(c.scrollTop=c.scrollTop-m.offsetHeight)}}):null},"SelectScrollUpButton")),L7="SelectScrollDownButton",ZP=R.forwardRef($e(function(t,n){const r=ei(L7,t.__scopeSelect),a=Kv(L7,t.__scopeSelect),[i,u]=R.useState(!1),l=Nt(n,a.onScrollButtonChange);return Pt(()=>{if(r.viewport&&r.isPositioned){let c=function(){const f=m.scrollHeight-m.clientHeight,d=Math.ceil(m.scrollTop)m.removeEventListener("scroll",c)}},[r.viewport,r.isPositioned]),i?E.jsx(JP,{...t,ref:l,onAutoScroll:()=>{const{viewport:c,selectedItem:m}=r;c&&m&&(c.scrollTop=c.scrollTop+m.offsetHeight)}}):null},"SelectScrollDownButton")),JP=R.forwardRef($e(function(t,n){const{__scopeSelect:r,onAutoScroll:a,...i}=t,u=ei("SelectScrollButton",r),l=R.useRef(null),c=o0(r),m=R.useCallback(()=>{l.current!==null&&(window.clearInterval(l.current),l.current=null)},[]);return R.useEffect(()=>()=>m(),[m]),Pt(()=>{var d;const f=c().find(v=>v.ref.current===document.activeElement);(d=f==null?void 0:f.ref.current)==null||d.scrollIntoView({block:"nearest"})},[c]),E.jsx(mt.div,{"aria-hidden":!0,...i,ref:n,style:{flexShrink:0,...i.style},onPointerDown:Ve(i.onPointerDown,()=>{l.current===null&&(l.current=window.setInterval(a,50))}),onPointerMove:Ve(i.onPointerMove,()=>{var f;(f=u.onItemLeave)==null||f.call(u),l.current===null&&(l.current=window.setInterval(a,50))}),onPointerLeave:Ve(i.onPointerLeave,()=>{m()})})},"SelectScrollButtonImpl")),eO=R.forwardRef($e(function(t,n){const{__scopeSelect:r,...a}=t;return E.jsx(mt.div,{"aria-hidden":!0,...a,ref:n})},"SelectSeparator")),Hj="SelectBubbleInput",Gj=R.forwardRef($e(function({__scopeSelect:t,...n},r){const a=oo(Hj,t),{value:i,onValueChange:u,required:l,disabled:c,name:m,autoComplete:f,form:d}=a,{nativeOptions:v,nativeSelectKey:_}=a,w=R.useRef(null),g=Nt(r,w),y=i??"",b=xq(y),O=Array.from(v).some(C=>(C.props.value??"")==="");return R.useEffect(()=>{const C=w.current;if(!C)return;const k=window.HTMLSelectElement.prototype,A=Object.getOwnPropertyDescriptor(k,"value").set;if(b!==y&&A){const T=new Event("change",{bubbles:!0});A.call(C,y),C.dispatchEvent(T)}},[b,y]),E.jsxs(mt.select,{"aria-hidden":!0,required:l,tabIndex:-1,name:m,autoComplete:f,disabled:c,form:d,onChange:C=>u(C.target.value),...n,style:{...jP,...n.style},ref:g,defaultValue:y,children:[Ql(i)&&!O?E.jsx("option",{value:""}):null,Array.from(v)]},_)},"SelectBubbleInput"));function tO(e){return typeof e=="function"}$e(tO,"isFunction");function Ql(e){return e===""||e===void 0}$e(Ql,"shouldShowPlaceholder");function Xv(e){const t=$r(e),n=R.useRef(""),r=R.useRef(0),a=R.useCallback(u=>{const l=n.current+u;t(l),$e((function c(m){n.current=m,window.clearTimeout(r.current),m!==""&&(r.current=window.setTimeout(()=>c(""),1e3))}),"updateSearch")(l)},[t]),i=R.useCallback(()=>{n.current="",window.clearTimeout(r.current)},[]);return R.useEffect(()=>()=>window.clearTimeout(r.current),[]),[n,a,i]}$e(Xv,"useTypeaheadSearch");function Yv(e,t,n){const a=t.length>1&&Array.from(t).every(m=>m===t[0])?t[0]:t,i=n?e.indexOf(n):-1;let u=nO(e,Math.max(i,0));a.length===1&&(u=u.filter(m=>m!==n));const c=u.find(m=>m.textValue.toLowerCase().startsWith(a.toLowerCase()));return c!==n?c:void 0}$e(Yv,"findNextItem");function nO(e,t){return e.map((n,r)=>e[(t+r)%e.length])}$e(nO,"wrapArray");/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const $N=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),Y_=(...e)=>e.filter((t,n,r)=>!!t&&t.trim()!==""&&r.indexOf(t)===n).join(" ").trim();/** + */const Fj=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),rO=(...e)=>e.filter((t,n,r)=>!!t&&t.trim()!==""&&r.indexOf(t)===n).join(" ").trim();/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */var MN={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** + */var Bj={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const qN=P.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:a="",children:o,iconNode:i,...s},u)=>P.createElement("svg",{ref:u,...MN,width:t,height:t,stroke:e,strokeWidth:r?Number(n)*24/Number(t):n,className:Y_("lucide",a),...s},[...i.map(([l,p])=>P.createElement(l,p)),...Array.isArray(o)?o:[o]]));/** + */const zj=R.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:a="",children:i,iconNode:u,...l},c)=>R.createElement("svg",{ref:c,...Bj,width:t,height:t,stroke:e,strokeWidth:r?Number(n)*24/Number(t):n,className:rO("lucide",a),...l},[...u.map(([m,f])=>R.createElement(m,f)),...Array.isArray(i)?i:[i]]));/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Ke=(e,t)=>{const n=P.forwardRef(({className:r,...a},o)=>P.createElement(qN,{ref:o,iconNode:t,className:Y_(`lucide-${$N(e)}`,r),...a}));return n.displayName=`${e}`,n};/** + */const _t=(e,t)=>{const n=R.forwardRef(({className:r,...a},i)=>R.createElement(zj,{ref:i,iconNode:t,className:rO(`lucide-${Fj(e)}`,r),...a}));return n.displayName=`${e}`,n};/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const IN=Ke("Activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);/** + */const Uj=_t("Activity",[["path",{d:"M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2",key:"169zse"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const DN=Ke("Calendar",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]]);/** + */const Wj=_t("Calendar",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Q_=Ke("ChartColumn",[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]]);/** + */const aO=_t("ChartColumn",[["path",{d:"M3 3v16a2 2 0 0 0 2 2h16",key:"c24i48"}],["path",{d:"M18 17V9",key:"2bz60n"}],["path",{d:"M13 17V5",key:"1frdt8"}],["path",{d:"M8 17v-3",key:"17ska0"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const LN=Ke("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/** + */const Vj=_t("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const Z_=Ke("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/** + */const oO=_t("ChevronDown",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const HN=Ke("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);/** + */const Kj=_t("ChevronUp",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const GN=Ke("CircleAlert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);/** + */const Xj=_t("CircleAlert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const J_=Ke("CircleCheckBig",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]);/** + */const iO=_t("CircleCheckBig",[["path",{d:"M21.801 10A10 10 0 1 1 17 3.335",key:"yps3ct"}],["path",{d:"m9 11 3 3L22 4",key:"1pflzl"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const ex=Ke("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/** + */const sO=_t("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const BN=Ke("Cpu",[["rect",{width:"16",height:"16",x:"4",y:"4",rx:"2",key:"14l7u7"}],["rect",{width:"6",height:"6",x:"9",y:"9",rx:"1",key:"5aljv4"}],["path",{d:"M15 2v2",key:"13l42r"}],["path",{d:"M15 20v2",key:"15mkzm"}],["path",{d:"M2 15h2",key:"1gxd5l"}],["path",{d:"M2 9h2",key:"1bbxkp"}],["path",{d:"M20 15h2",key:"19e6y8"}],["path",{d:"M20 9h2",key:"19tzq7"}],["path",{d:"M9 2v2",key:"165o2o"}],["path",{d:"M9 20v2",key:"i2bqo8"}]]);/** + */const Yj=_t("Cpu",[["rect",{width:"16",height:"16",x:"4",y:"4",rx:"2",key:"14l7u7"}],["rect",{width:"6",height:"6",x:"9",y:"9",rx:"1",key:"5aljv4"}],["path",{d:"M15 2v2",key:"13l42r"}],["path",{d:"M15 20v2",key:"15mkzm"}],["path",{d:"M2 15h2",key:"1gxd5l"}],["path",{d:"M2 9h2",key:"1bbxkp"}],["path",{d:"M20 15h2",key:"19e6y8"}],["path",{d:"M20 9h2",key:"19tzq7"}],["path",{d:"M9 2v2",key:"165o2o"}],["path",{d:"M9 20v2",key:"i2bqo8"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const tx=Ke("Database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);/** + */const uO=_t("Database",[["ellipse",{cx:"12",cy:"5",rx:"9",ry:"3",key:"msslwz"}],["path",{d:"M3 5V19A9 3 0 0 0 21 19V5",key:"1wlel7"}],["path",{d:"M3 12A9 3 0 0 0 21 12",key:"mv7ke4"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const FN=Ke("ExternalLink",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);/** + */const Qj=_t("ExternalLink",[["path",{d:"M15 3h6v6",key:"1q9fwt"}],["path",{d:"M10 14 21 3",key:"gplh6r"}],["path",{d:"M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6",key:"a6xqqp"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const zN=Ke("Gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]);/** + */const Zj=_t("Gauge",[["path",{d:"m12 14 4-4",key:"9kzdfg"}],["path",{d:"M3.34 19a10 10 0 1 1 17.32 0",key:"19p75a"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const nx=Ke("GitBranch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);/** + */const lO=_t("GitBranch",[["line",{x1:"6",x2:"6",y1:"3",y2:"15",key:"17qcm7"}],["circle",{cx:"18",cy:"6",r:"3",key:"1h7g24"}],["circle",{cx:"6",cy:"18",r:"3",key:"fqmcym"}],["path",{d:"M18 9a9 9 0 0 1-9 9",key:"n2h4wq"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const UN=Ke("MemoryStick",[["path",{d:"M6 19v-3",key:"1nvgqn"}],["path",{d:"M10 19v-3",key:"iu8nkm"}],["path",{d:"M14 19v-3",key:"kcehxu"}],["path",{d:"M18 19v-3",key:"1vh91z"}],["path",{d:"M8 11V9",key:"63erz4"}],["path",{d:"M16 11V9",key:"fru6f3"}],["path",{d:"M12 11V9",key:"ha00sb"}],["path",{d:"M2 15h20",key:"16ne18"}],["path",{d:"M2 7a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v1.1a2 2 0 0 0 0 3.837V17a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-5.1a2 2 0 0 0 0-3.837Z",key:"lhddv3"}]]);/** + */const Jj=_t("MemoryStick",[["path",{d:"M6 19v-3",key:"1nvgqn"}],["path",{d:"M10 19v-3",key:"iu8nkm"}],["path",{d:"M14 19v-3",key:"kcehxu"}],["path",{d:"M18 19v-3",key:"1vh91z"}],["path",{d:"M8 11V9",key:"63erz4"}],["path",{d:"M16 11V9",key:"fru6f3"}],["path",{d:"M12 11V9",key:"ha00sb"}],["path",{d:"M2 15h20",key:"16ne18"}],["path",{d:"M2 7a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v1.1a2 2 0 0 0 0 3.837V17a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2v-5.1a2 2 0 0 0 0-3.837Z",key:"lhddv3"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const rx=Ke("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);/** + */const cO=_t("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const ax=Ke("Server",[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]]);/** + */const pO=_t("Server",[["rect",{width:"20",height:"8",x:"2",y:"2",rx:"2",ry:"2",key:"ngkwjq"}],["rect",{width:"20",height:"8",x:"2",y:"14",rx:"2",ry:"2",key:"iecqi9"}],["line",{x1:"6",x2:"6.01",y1:"6",y2:"6",key:"16zg32"}],["line",{x1:"6",x2:"6.01",y1:"18",y2:"18",key:"nzw8ys"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const WN=Ke("Shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]);/** + */const eM=_t("Shield",[["path",{d:"M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z",key:"oel41y"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const VN=Ke("Target",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]]);/** + */const tM=_t("Target",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["circle",{cx:"12",cy:"12",r:"6",key:"1vlfrh"}],["circle",{cx:"12",cy:"12",r:"2",key:"1c9p78"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const ox=Ke("TrendingUp",[["polyline",{points:"22 7 13.5 15.5 8.5 10.5 2 17",key:"126l90"}],["polyline",{points:"16 7 22 7 22 13",key:"kwv8wd"}]]);/** + */const mO=_t("TrendingUp",[["polyline",{points:"22 7 13.5 15.5 8.5 10.5 2 17",key:"126l90"}],["polyline",{points:"16 7 22 7 22 13",key:"kwv8wd"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const KN=Ke("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** + */const nM=_t("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);/** * @license lucide-react v0.462.0 - ISC * * This source code is licensed under the ISC license. * See the LICENSE file in the root directory of this source tree. - */const XN=Ke("Zap",[["path",{d:"M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z",key:"1xq2db"}]]);function ix(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var a=e.length;for(t=0;t{const t=ZN(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:i=>{const s=i.split(n9);return s[0]===""&&s.length!==1&&s.shift(),sx(s,t)||QN(i)},getConflictingClassGroupIds:(i,s)=>{const u=n[i]||[];return s&&r[i]?[...u,...r[i]]:u}}},sx=(e,t)=>{var i;if(e.length===0)return t.classGroupId;const n=e[0],r=t.nextPart.get(n),a=r?sx(e.slice(1),r):void 0;if(a)return a;if(t.validators.length===0)return;const o=e.join(n9);return(i=t.validators.find(({validator:s})=>s(o)))==null?void 0:i.classGroupId},n2=/^\[(.+)\]$/,QN=e=>{if(n2.test(e)){const t=n2.exec(e)[1],n=t==null?void 0:t.substring(0,t.indexOf(":"));if(n)return"arbitrary.."+n}},ZN=e=>{const{theme:t,prefix:n}=e,r={nextPart:new Map,validators:[]};return eT(Object.entries(e.classGroups),n).forEach(([o,i])=>{m3(i,r,o,t)}),r},m3=(e,t,n,r)=>{e.forEach(a=>{if(typeof a=="string"){const o=a===""?t:r2(t,a);o.classGroupId=n;return}if(typeof a=="function"){if(JN(a)){m3(a(r),t,n,r);return}t.validators.push({validator:a,classGroupId:n});return}Object.entries(a).forEach(([o,i])=>{m3(i,r2(t,o),n,r)})})},r2=(e,t)=>{let n=e;return t.split(n9).forEach(r=>{n.nextPart.has(r)||n.nextPart.set(r,{nextPart:new Map,validators:[]}),n=n.nextPart.get(r)}),n},JN=e=>e.isThemeGetter,eT=(e,t)=>t?e.map(([n,r])=>{const a=r.map(o=>typeof o=="string"?t+o:typeof o=="object"?Object.fromEntries(Object.entries(o).map(([i,s])=>[t+i,s])):o);return[n,a]}):e,tT=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,n=new Map,r=new Map;const a=(o,i)=>{n.set(o,i),t++,t>e&&(t=0,r=n,n=new Map)};return{get(o){let i=n.get(o);if(i!==void 0)return i;if((i=r.get(o))!==void 0)return a(o,i),i},set(o,i){n.has(o)?n.set(o,i):a(o,i)}}},ux="!",nT=e=>{const{separator:t,experimentalParseClassName:n}=e,r=t.length===1,a=t[0],o=t.length,i=s=>{const u=[];let l=0,p=0,c;for(let y=0;yp?c-p:void 0;return{modifiers:u,hasImportantModifier:d,baseClassName:g,maybePostfixModifierPosition:f}};return n?s=>n({className:s,parseClassName:i}):i},rT=e=>{if(e.length<=1)return e;const t=[];let n=[];return e.forEach(r=>{r[0]==="["?(t.push(...n.sort(),r),n=[]):n.push(r)}),t.push(...n.sort()),t},aT=e=>({cache:tT(e.cacheSize),parseClassName:nT(e),...YN(e)}),oT=/\s+/,iT=(e,t)=>{const{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:a}=t,o=[],i=e.trim().split(oT);let s="";for(let u=i.length-1;u>=0;u-=1){const l=i[u],{modifiers:p,hasImportantModifier:c,baseClassName:m,maybePostfixModifierPosition:d}=n(l);let g=!!d,f=r(g?m.substring(0,d):m);if(!f){if(!g){s=l+(s.length>0?" "+s:s);continue}if(f=r(m),!f){s=l+(s.length>0?" "+s:s);continue}g=!1}const y=rT(p).join(":"),v=c?y+ux:y,h=v+f;if(o.includes(h))continue;o.push(h);const _=a(f,g);for(let w=0;w<_.length;++w){const x=_[w];o.push(v+x)}s=l+(s.length>0?" "+s:s)}return s};function sT(){let e=0,t,n,r="";for(;e{if(typeof e=="string")return e;let t,n="";for(let r=0;rc(p),e());return n=aT(l),r=n.cache.get,a=n.cache.set,o=s,s(u)}function s(u){const l=r(u);if(l)return l;const p=iT(u,n);return a(u,p),p}return function(){return o(sT.apply(null,arguments))}}const Me=e=>{const t=n=>n[e]||[];return t.isThemeGetter=!0,t},cx=/^\[(?:([a-z-]+):)?(.+)\]$/i,lT=/^\d+\/\d+$/,cT=new Set(["px","full","screen"]),pT=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,mT=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,dT=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,fT=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,vT=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,gr=e=>vi(e)||cT.has(e)||lT.test(e),Xr=e=>gs(e,"length",ST),vi=e=>!!e&&!Number.isNaN(Number(e)),Rm=e=>gs(e,"number",vi),Gs=e=>!!e&&Number.isInteger(Number(e)),hT=e=>e.endsWith("%")&&vi(e.slice(0,-1)),se=e=>cx.test(e),Yr=e=>pT.test(e),yT=new Set(["length","size","percentage"]),gT=e=>gs(e,yT,px),_T=e=>gs(e,"position",px),xT=new Set(["image","url"]),wT=e=>gs(e,xT,OT),bT=e=>gs(e,"",PT),Bs=()=>!0,gs=(e,t,n)=>{const r=cx.exec(e);return r?r[1]?typeof t=="string"?r[1]===t:t.has(r[1]):n(r[2]):!1},ST=e=>mT.test(e)&&!dT.test(e),px=()=>!1,PT=e=>fT.test(e),OT=e=>vT.test(e),kT=()=>{const e=Me("colors"),t=Me("spacing"),n=Me("blur"),r=Me("brightness"),a=Me("borderColor"),o=Me("borderRadius"),i=Me("borderSpacing"),s=Me("borderWidth"),u=Me("contrast"),l=Me("grayscale"),p=Me("hueRotate"),c=Me("invert"),m=Me("gap"),d=Me("gradientColorStops"),g=Me("gradientColorStopPositions"),f=Me("inset"),y=Me("margin"),v=Me("opacity"),h=Me("padding"),_=Me("saturate"),w=Me("scale"),x=Me("sepia"),S=Me("skew"),O=Me("space"),k=Me("translate"),C=()=>["auto","contain","none"],N=()=>["auto","hidden","clip","visible","scroll"],T=()=>["auto",se,t],A=()=>[se,t],$=()=>["",gr,Xr],R=()=>["auto",vi,se],q=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],M=()=>["solid","dashed","dotted","double","none"],D=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],j=()=>["start","end","center","between","around","evenly","stretch"],I=()=>["","0",se],B=()=>["auto","avoid","all","avoid-page","page","left","right","column"],U=()=>[vi,se];return{cacheSize:500,separator:":",theme:{colors:[Bs],spacing:[gr,Xr],blur:["none","",Yr,se],brightness:U(),borderColor:[e],borderRadius:["none","","full",Yr,se],borderSpacing:A(),borderWidth:$(),contrast:U(),grayscale:I(),hueRotate:U(),invert:I(),gap:A(),gradientColorStops:[e],gradientColorStopPositions:[hT,Xr],inset:T(),margin:T(),opacity:U(),padding:A(),saturate:U(),scale:U(),sepia:I(),skew:U(),space:A(),translate:A()},classGroups:{aspect:[{aspect:["auto","square","video",se]}],container:["container"],columns:[{columns:[Yr]}],"break-after":[{"break-after":B()}],"break-before":[{"break-before":B()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...q(),se]}],overflow:[{overflow:N()}],"overflow-x":[{"overflow-x":N()}],"overflow-y":[{"overflow-y":N()}],overscroll:[{overscroll:C()}],"overscroll-x":[{"overscroll-x":C()}],"overscroll-y":[{"overscroll-y":C()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[f]}],"inset-x":[{"inset-x":[f]}],"inset-y":[{"inset-y":[f]}],start:[{start:[f]}],end:[{end:[f]}],top:[{top:[f]}],right:[{right:[f]}],bottom:[{bottom:[f]}],left:[{left:[f]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",Gs,se]}],basis:[{basis:T()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",se]}],grow:[{grow:I()}],shrink:[{shrink:I()}],order:[{order:["first","last","none",Gs,se]}],"grid-cols":[{"grid-cols":[Bs]}],"col-start-end":[{col:["auto",{span:["full",Gs,se]},se]}],"col-start":[{"col-start":R()}],"col-end":[{"col-end":R()}],"grid-rows":[{"grid-rows":[Bs]}],"row-start-end":[{row:["auto",{span:[Gs,se]},se]}],"row-start":[{"row-start":R()}],"row-end":[{"row-end":R()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",se]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",se]}],gap:[{gap:[m]}],"gap-x":[{"gap-x":[m]}],"gap-y":[{"gap-y":[m]}],"justify-content":[{justify:["normal",...j()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...j(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...j(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[h]}],px:[{px:[h]}],py:[{py:[h]}],ps:[{ps:[h]}],pe:[{pe:[h]}],pt:[{pt:[h]}],pr:[{pr:[h]}],pb:[{pb:[h]}],pl:[{pl:[h]}],m:[{m:[y]}],mx:[{mx:[y]}],my:[{my:[y]}],ms:[{ms:[y]}],me:[{me:[y]}],mt:[{mt:[y]}],mr:[{mr:[y]}],mb:[{mb:[y]}],ml:[{ml:[y]}],"space-x":[{"space-x":[O]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[O]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",se,t]}],"min-w":[{"min-w":[se,t,"min","max","fit"]}],"max-w":[{"max-w":[se,t,"none","full","min","max","fit","prose",{screen:[Yr]},Yr]}],h:[{h:[se,t,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[se,t,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[se,t,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[se,t,"auto","min","max","fit"]}],"font-size":[{text:["base",Yr,Xr]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",Rm]}],"font-family":[{font:[Bs]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",se]}],"line-clamp":[{"line-clamp":["none",vi,Rm]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",gr,se]}],"list-image":[{"list-image":["none",se]}],"list-style-type":[{list:["none","disc","decimal",se]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[v]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[v]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...M(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",gr,Xr]}],"underline-offset":[{"underline-offset":["auto",gr,se]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:A()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",se]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",se]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[v]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...q(),_T]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",gT]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},wT]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[g]}],"gradient-via-pos":[{via:[g]}],"gradient-to-pos":[{to:[g]}],"gradient-from":[{from:[d]}],"gradient-via":[{via:[d]}],"gradient-to":[{to:[d]}],rounded:[{rounded:[o]}],"rounded-s":[{"rounded-s":[o]}],"rounded-e":[{"rounded-e":[o]}],"rounded-t":[{"rounded-t":[o]}],"rounded-r":[{"rounded-r":[o]}],"rounded-b":[{"rounded-b":[o]}],"rounded-l":[{"rounded-l":[o]}],"rounded-ss":[{"rounded-ss":[o]}],"rounded-se":[{"rounded-se":[o]}],"rounded-ee":[{"rounded-ee":[o]}],"rounded-es":[{"rounded-es":[o]}],"rounded-tl":[{"rounded-tl":[o]}],"rounded-tr":[{"rounded-tr":[o]}],"rounded-br":[{"rounded-br":[o]}],"rounded-bl":[{"rounded-bl":[o]}],"border-w":[{border:[s]}],"border-w-x":[{"border-x":[s]}],"border-w-y":[{"border-y":[s]}],"border-w-s":[{"border-s":[s]}],"border-w-e":[{"border-e":[s]}],"border-w-t":[{"border-t":[s]}],"border-w-r":[{"border-r":[s]}],"border-w-b":[{"border-b":[s]}],"border-w-l":[{"border-l":[s]}],"border-opacity":[{"border-opacity":[v]}],"border-style":[{border:[...M(),"hidden"]}],"divide-x":[{"divide-x":[s]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[s]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[v]}],"divide-style":[{divide:M()}],"border-color":[{border:[a]}],"border-color-x":[{"border-x":[a]}],"border-color-y":[{"border-y":[a]}],"border-color-s":[{"border-s":[a]}],"border-color-e":[{"border-e":[a]}],"border-color-t":[{"border-t":[a]}],"border-color-r":[{"border-r":[a]}],"border-color-b":[{"border-b":[a]}],"border-color-l":[{"border-l":[a]}],"divide-color":[{divide:[a]}],"outline-style":[{outline:["",...M()]}],"outline-offset":[{"outline-offset":[gr,se]}],"outline-w":[{outline:[gr,Xr]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:$()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[v]}],"ring-offset-w":[{"ring-offset":[gr,Xr]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",Yr,bT]}],"shadow-color":[{shadow:[Bs]}],opacity:[{opacity:[v]}],"mix-blend":[{"mix-blend":[...D(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":D()}],filter:[{filter:["","none"]}],blur:[{blur:[n]}],brightness:[{brightness:[r]}],contrast:[{contrast:[u]}],"drop-shadow":[{"drop-shadow":["","none",Yr,se]}],grayscale:[{grayscale:[l]}],"hue-rotate":[{"hue-rotate":[p]}],invert:[{invert:[c]}],saturate:[{saturate:[_]}],sepia:[{sepia:[x]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[n]}],"backdrop-brightness":[{"backdrop-brightness":[r]}],"backdrop-contrast":[{"backdrop-contrast":[u]}],"backdrop-grayscale":[{"backdrop-grayscale":[l]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[p]}],"backdrop-invert":[{"backdrop-invert":[c]}],"backdrop-opacity":[{"backdrop-opacity":[v]}],"backdrop-saturate":[{"backdrop-saturate":[_]}],"backdrop-sepia":[{"backdrop-sepia":[x]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[i]}],"border-spacing-x":[{"border-spacing-x":[i]}],"border-spacing-y":[{"border-spacing-y":[i]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",se]}],duration:[{duration:U()}],ease:[{ease:["linear","in","out","in-out",se]}],delay:[{delay:U()}],animate:[{animate:["none","spin","ping","pulse","bounce",se]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[w]}],"scale-x":[{"scale-x":[w]}],"scale-y":[{"scale-y":[w]}],rotate:[{rotate:[Gs,se]}],"translate-x":[{"translate-x":[k]}],"translate-y":[{"translate-y":[k]}],"skew-x":[{"skew-x":[S]}],"skew-y":[{"skew-y":[S]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",se]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",se]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":A()}],"scroll-mx":[{"scroll-mx":A()}],"scroll-my":[{"scroll-my":A()}],"scroll-ms":[{"scroll-ms":A()}],"scroll-me":[{"scroll-me":A()}],"scroll-mt":[{"scroll-mt":A()}],"scroll-mr":[{"scroll-mr":A()}],"scroll-mb":[{"scroll-mb":A()}],"scroll-ml":[{"scroll-ml":A()}],"scroll-p":[{"scroll-p":A()}],"scroll-px":[{"scroll-px":A()}],"scroll-py":[{"scroll-py":A()}],"scroll-ps":[{"scroll-ps":A()}],"scroll-pe":[{"scroll-pe":A()}],"scroll-pt":[{"scroll-pt":A()}],"scroll-pr":[{"scroll-pr":A()}],"scroll-pb":[{"scroll-pb":A()}],"scroll-pl":[{"scroll-pl":A()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",se]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[gr,Xr,Rm]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},CT=uT(kT);function Pe(...e){return CT(le(e))}const AT=CN,ET=AN,mx=P.forwardRef(({className:e,children:t,...n},r)=>b.jsxs(F_,{ref:r,className:Pe("flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",e),...n,children:[t,b.jsx(EN,{asChild:!0,children:b.jsx(Z_,{className:"h-4 w-4 opacity-50"})})]}));mx.displayName=F_.displayName;const dx=P.forwardRef(({className:e,...t},n)=>b.jsx(V_,{ref:n,className:Pe("flex cursor-default items-center justify-center py-1",e),...t,children:b.jsx(HN,{className:"h-4 w-4"})}));dx.displayName=V_.displayName;const fx=P.forwardRef(({className:e,...t},n)=>b.jsx(K_,{ref:n,className:Pe("flex cursor-default items-center justify-center py-1",e),...t,children:b.jsx(Z_,{className:"h-4 w-4"})}));fx.displayName=K_.displayName;const vx=P.forwardRef(({className:e,children:t,position:n="popper",...r},a)=>(P.useEffect(()=>{const o=()=>{document.querySelectorAll("[data-radix-popper-content-wrapper]").forEach(u=>{const l=u;l.style.setProperty("--popover","0 0% 100%"),l.style.setProperty("--popover-foreground","222.2 84% 4.9%"),l.style.setProperty("--border","214.3 31.8% 91.4%"),l.style.setProperty("--background","0 0% 100%"),l.style.setProperty("--foreground","222.2 84% 4.9%"),(document.documentElement.classList.contains("dark")||document.body.classList.contains("dark"))&&(l.style.setProperty("--popover","222.2 84% 4.9%"),l.style.setProperty("--popover-foreground","210 40% 98%"),l.style.setProperty("--border","217.2 32.6% 17.5%"),l.style.setProperty("--background","222.2 84% 4.9%"),l.style.setProperty("--foreground","210 40% 98%"))})};o();const i=setTimeout(o,100);return()=>clearTimeout(i)}),b.jsx(NN,{children:b.jsxs(z_,{ref:a,className:Pe("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",n==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:n,...r,children:[b.jsx(dx,{}),b.jsx(TN,{className:Pe("p-1",n==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:t}),b.jsx(fx,{})]})})));vx.displayName=z_.displayName;const NT=P.forwardRef(({className:e,...t},n)=>b.jsx(U_,{ref:n,className:Pe("py-1.5 pl-8 pr-2 text-sm font-semibold",e),...t}));NT.displayName=U_.displayName;const hx=P.forwardRef(({className:e,children:t,...n},r)=>b.jsxs(W_,{ref:r,className:Pe("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e),...n,children:[b.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:b.jsx(RN,{children:b.jsx(LN,{className:"h-4 w-4"})})}),b.jsx(jN,{children:t})]}));hx.displayName=W_.displayName;const TT=P.forwardRef(({className:e,...t},n)=>b.jsx(X_,{ref:n,className:Pe("-mx-1 my-1 h-px bg-muted",e),...t}));TT.displayName=X_.displayName;const a2=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,o2=le,yx=(e,t)=>n=>{var r;if((t==null?void 0:t.variants)==null)return o2(e,n==null?void 0:n.class,n==null?void 0:n.className);const{variants:a,defaultVariants:o}=t,i=Object.keys(a).map(l=>{const p=n==null?void 0:n[l],c=o==null?void 0:o[l];if(p===null)return null;const m=a2(p)||a2(c);return a[l][m]}),s=n&&Object.entries(n).reduce((l,p)=>{let[c,m]=p;return m===void 0||(l[c]=m),l},{}),u=t==null||(r=t.compoundVariants)===null||r===void 0?void 0:r.reduce((l,p)=>{let{class:c,className:m,...d}=p;return Object.entries(d).every(g=>{let[f,y]=g;return Array.isArray(y)?y.includes({...o,...s}[f]):{...o,...s}[f]===y})?[...l,c,m]:l},[]);return o2(e,i,u,n==null?void 0:n.class,n==null?void 0:n.className)},jT=yx("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function RT({className:e,variant:t,...n}){return b.jsx("div",{className:Pe(jT({variant:t}),e),...n})}var $T=Symbol.for("react.lazy"),bp=e4[" use ".trim().toString()];function MT(e){return typeof e=="object"&&e!==null&&"then"in e}function gx(e){return e!=null&&typeof e=="object"&&"$$typeof"in e&&e.$$typeof===$T&&"_payload"in e&&MT(e._payload)}function qT(e){const t=DT(e),n=P.forwardRef((r,a)=>{let{children:o,...i}=r;gx(o)&&typeof bp=="function"&&(o=bp(o._payload));const s=P.Children.toArray(o),u=s.find(HT);if(u){const l=u.props.children,p=s.map(c=>c===u?P.Children.count(l)>1?P.Children.only(null):P.isValidElement(l)?l.props.children:null:c);return b.jsx(t,{...i,ref:a,children:P.isValidElement(l)?P.cloneElement(l,void 0,p):null})}return b.jsx(t,{...i,ref:a,children:o})});return n.displayName=`${e}.Slot`,n}var IT=qT("Slot");function DT(e){const t=P.forwardRef((n,r)=>{let{children:a,...o}=n;if(gx(a)&&typeof bp=="function"&&(a=bp(a._payload)),P.isValidElement(a)){const i=BT(a),s=GT(o,a.props);return a.type!==P.Fragment&&(s.ref=r?Tl(r,i):i),P.cloneElement(a,s)}return P.Children.count(a)>1?P.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var LT=Symbol("radix.slottable");function HT(e){return P.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===LT}function GT(e,t){const n={...t};for(const r in t){const a=e[r],o=t[r];/^on[A-Z]/.test(r)?a&&o?n[r]=(...s)=>{const u=o(...s);return a(...s),u}:a&&(n[r]=a):r==="style"?n[r]={...a,...o}:r==="className"&&(n[r]=[a,o].filter(Boolean).join(" "))}return{...e,...n}}function BT(e){var r,a;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(a=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:a.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}const FT=yx("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),Sp=P.forwardRef(({className:e,variant:t,size:n,asChild:r=!1,...a},o)=>{const i=r?IT:"button";return b.jsx(i,{className:Pe(FT({variant:t,size:n,className:e})),ref:o,...a})});Sp.displayName="Button";const zT=({selectedVersion:e,availableVersions:t,onVersionChange:n,metadata:r,onDownloadReport:a})=>{const o=p=>{try{return new Date(p).toLocaleDateString()}catch{return p}},i=p=>`https://github.com/envoyproxy/gateway/releases/tag/v${p}`,s=p=>`https://github.com/envoyproxy/gateway/releases/download/v${p}/benchmark_report.zip`,u=()=>{const p=i(e);window.open(p,"_blank","noopener,noreferrer")},l=()=>{const p=s(e);window.open(p,"_blank","noopener,noreferrer")};return b.jsxs("div",{className:"flex flex-col sm:flex-row items-start sm:items-center gap-3",children:[b.jsxs("div",{className:"flex items-center gap-2",children:[b.jsx("label",{className:"text-sm font-medium text-gray-700",children:"Version:"}),b.jsxs(AT,{value:e,onValueChange:n,children:[b.jsx(mx,{className:"w-32",children:b.jsx(ET,{})}),b.jsx(vx,{children:t.map(p=>b.jsxs(hx,{value:p,children:["v",p]},p))})]})]}),r&&b.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-xs text-gray-600",children:[b.jsxs("div",{className:"flex items-center gap-1",children:[b.jsx(DN,{className:"h-3 w-3"}),b.jsx("span",{children:o(r.date)})]}),r.environment&&b.jsx(RT,{variant:"secondary",className:"text-xs",children:r.environment}),r.gitCommit&&b.jsxs("div",{className:"flex items-center gap-1",children:[b.jsx(nx,{className:"h-3 w-3"}),b.jsx("span",{className:"font-mono",children:r.gitCommit.substring(0,7)})]}),r.description&&b.jsx("span",{className:"hidden sm:inline max-w-xs truncate",title:r.description,children:r.description})]}),b.jsxs("div",{className:"flex items-center gap-2 ml-auto",children:[b.jsxs(Sp,{variant:"outline",size:"sm",onClick:u,className:"flex items-center gap-1 text-xs",children:[b.jsx(FN,{className:"h-3 w-3"}),"View Release"]}),b.jsxs(Sp,{variant:"outline",size:"sm",onClick:l,className:"flex items-center gap-1 text-xs",children:[b.jsx(Q_,{className:"h-3 w-3"}),"Download Benchmark"]})]})]})},_e=P.forwardRef(({className:e,...t},n)=>b.jsx("div",{ref:n,className:Pe("rounded-lg border bg-card text-card-foreground shadow-sm",e),...t}));_e.displayName="Card";const Se=P.forwardRef(({className:e,...t},n)=>b.jsx("div",{ref:n,className:Pe("flex flex-col space-y-1.5 p-6",e),...t}));Se.displayName="CardHeader";const xe=P.forwardRef(({className:e,...t},n)=>b.jsx("h3",{ref:n,className:Pe("text-2xl font-semibold leading-none tracking-tight",e),...t}));xe.displayName="CardTitle";const nn=P.forwardRef(({className:e,...t},n)=>b.jsx("p",{ref:n,className:Pe("text-sm text-muted-foreground",e),...t}));nn.displayName="CardDescription";const we=P.forwardRef(({className:e,...t},n)=>b.jsx("div",{ref:n,className:Pe("p-6 pt-0",e),...t}));we.displayName="CardContent";const UT=P.forwardRef(({className:e,...t},n)=>b.jsx("div",{ref:n,className:Pe("flex items-center p-6 pt-0",e),...t}));UT.displayName="CardFooter";const WT=({performanceSummary:e,benchmarkResults:t})=>{const n=Math.round(Math.max(...t.map(i=>i.throughput))),r=Math.round(e.avgLatency),a=Math.round(Math.max(...t.map(i=>i.resources.envoyGateway.memory.mean+i.resources.envoyProxy.memory.mean))),o=e.maxRoutes;return b.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4 mb-8",children:[b.jsxs(_e,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[b.jsx(Se,{className:"pb-2",children:b.jsxs(xe,{className:"text-sm font-medium flex items-center",children:[b.jsx(IN,{className:"h-4 w-4 mr-2"}),"Max Throughput in Test"]})}),b.jsxs(we,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[n.toLocaleString()," RPS"]}),b.jsx("p",{className:"text-purple-100 text-sm",children:"Requests per second"})]})]}),b.jsxs(_e,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[b.jsx(Se,{className:"pb-2",children:b.jsxs(xe,{className:"text-sm font-medium flex items-center",children:[b.jsx(ex,{className:"h-4 w-4 mr-2"}),"Mean Response Time"]})}),b.jsxs(we,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[r,"ms"]}),b.jsx("p",{className:"text-purple-100 text-sm",children:"End-to-end via Nighthawk"})]})]}),b.jsxs(_e,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[b.jsx(Se,{className:"pb-2",children:b.jsxs(xe,{className:"text-sm font-medium flex items-center",children:[b.jsx(UN,{className:"h-4 w-4 mr-2"}),"Memory Usage"]})}),b.jsxs(we,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[a,"MB"]}),b.jsxs("p",{className:"text-purple-100 text-sm",children:["Peak at ",o," routes"]})]})]}),b.jsxs(_e,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[b.jsx(Se,{className:"pb-2",children:b.jsxs(xe,{className:"text-sm font-medium flex items-center text",children:[b.jsx(ax,{className:"h-4 w-4 mr-2"}),"Max Routes in Test"]})}),b.jsxs(we,{children:[b.jsx("div",{className:"text-2xl font-bold",children:o.toLocaleString()}),b.jsx("p",{className:"text-purple-100 text-sm",children:"HTTPRoutes tested"})]})]})]})};var VT=Array.isArray,Vt=VT,KT=typeof Fl=="object"&&Fl&&Fl.Object===Object&&Fl,_x=KT,XT=_x,YT=typeof self=="object"&&self&&self.Object===Object&&self,QT=XT||YT||Function("return this")(),yr=QT,ZT=yr,JT=ZT.Symbol,$l=JT,i2=$l,xx=Object.prototype,ej=xx.hasOwnProperty,tj=xx.toString,Fs=i2?i2.toStringTag:void 0;function nj(e){var t=ej.call(e,Fs),n=e[Fs];try{e[Fs]=void 0;var r=!0}catch{}var a=tj.call(e);return r&&(t?e[Fs]=n:delete e[Fs]),a}var rj=nj,aj=Object.prototype,oj=aj.toString;function ij(e){return oj.call(e)}var sj=ij,s2=$l,uj=rj,lj=sj,cj="[object Null]",pj="[object Undefined]",u2=s2?s2.toStringTag:void 0;function mj(e){return e==null?e===void 0?pj:cj:u2&&u2 in Object(e)?uj(e):lj(e)}var zr=mj;function dj(e){return e!=null&&typeof e=="object"}var Ur=dj,fj=zr,vj=Ur,hj="[object Symbol]";function yj(e){return typeof e=="symbol"||vj(e)&&fj(e)==hj}var _s=yj,gj=Vt,_j=_s,xj=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,wj=/^\w*$/;function bj(e,t){if(gj(e))return!1;var n=typeof e;return n=="number"||n=="symbol"||n=="boolean"||e==null||_j(e)?!0:wj.test(e)||!xj.test(e)||t!=null&&e in Object(t)}var r9=bj;function Sj(e){var t=typeof e;return e!=null&&(t=="object"||t=="function")}var qa=Sj;const xs=Ae(qa);var Pj=zr,Oj=qa,kj="[object AsyncFunction]",Cj="[object Function]",Aj="[object GeneratorFunction]",Ej="[object Proxy]";function Nj(e){if(!Oj(e))return!1;var t=Pj(e);return t==Cj||t==Aj||t==kj||t==Ej}var a9=Nj;const oe=Ae(a9);var Tj=yr,jj=Tj["__core-js_shared__"],Rj=jj,$m=Rj,l2=function(){var e=/[^.]+$/.exec($m&&$m.keys&&$m.keys.IE_PROTO||"");return e?"Symbol(src)_1."+e:""}();function $j(e){return!!l2&&l2 in e}var Mj=$j,qj=Function.prototype,Ij=qj.toString;function Dj(e){if(e!=null){try{return Ij.call(e)}catch{}try{return e+""}catch{}}return""}var wx=Dj,Lj=a9,Hj=Mj,Gj=qa,Bj=wx,Fj=/[\\^$.*+?()[\]{}|]/g,zj=/^\[object .+?Constructor\]$/,Uj=Function.prototype,Wj=Object.prototype,Vj=Uj.toString,Kj=Wj.hasOwnProperty,Xj=RegExp("^"+Vj.call(Kj).replace(Fj,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function Yj(e){if(!Gj(e)||Hj(e))return!1;var t=Lj(e)?Xj:zj;return t.test(Bj(e))}var Qj=Yj;function Zj(e,t){return e==null?void 0:e[t]}var Jj=Zj,eR=Qj,tR=Jj;function nR(e,t){var n=tR(e,t);return eR(n)?n:void 0}var Ro=nR,rR=Ro,aR=rR(Object,"create"),e1=aR,c2=e1;function oR(){this.__data__=c2?c2(null):{},this.size=0}var iR=oR;function sR(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}var uR=sR,lR=e1,cR="__lodash_hash_undefined__",pR=Object.prototype,mR=pR.hasOwnProperty;function dR(e){var t=this.__data__;if(lR){var n=t[e];return n===cR?void 0:n}return mR.call(t,e)?t[e]:void 0}var fR=dR,vR=e1,hR=Object.prototype,yR=hR.hasOwnProperty;function gR(e){var t=this.__data__;return vR?t[e]!==void 0:yR.call(t,e)}var _R=gR,xR=e1,wR="__lodash_hash_undefined__";function bR(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=xR&&t===void 0?wR:t,this}var SR=bR,PR=iR,OR=uR,kR=fR,CR=_R,AR=SR;function ws(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t-1}var UR=zR,WR=t1;function VR(e,t){var n=this.__data__,r=WR(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this}var KR=VR,XR=TR,YR=LR,QR=BR,ZR=UR,JR=KR;function bs(e){var t=-1,n=e==null?0:e.length;for(this.clear();++t{const t=iM(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:u=>{const l=u.split(Qv);return l[0]===""&&l.length!==1&&l.shift(),fO(l,t)||oM(u)},getConflictingClassGroupIds:(u,l)=>{const c=n[u]||[];return l&&r[u]?[...c,...r[u]]:c}}},fO=(e,t)=>{var u;if(e.length===0)return t.classGroupId;const n=e[0],r=t.nextPart.get(n),a=r?fO(e.slice(1),r):void 0;if(a)return a;if(t.validators.length===0)return;const i=e.join(Qv);return(u=t.validators.find(({validator:l})=>l(i)))==null?void 0:u.classGroupId},H7=/^\[(.+)\]$/,oM=e=>{if(H7.test(e)){const t=H7.exec(e)[1],n=t==null?void 0:t.substring(0,t.indexOf(":"));if(n)return"arbitrary.."+n}},iM=e=>{const{theme:t,prefix:n}=e,r={nextPart:new Map,validators:[]};return uM(Object.entries(e.classGroups),n).forEach(([i,u])=>{s5(u,r,i,t)}),r},s5=(e,t,n,r)=>{e.forEach(a=>{if(typeof a=="string"){const i=a===""?t:G7(t,a);i.classGroupId=n;return}if(typeof a=="function"){if(sM(a)){s5(a(r),t,n,r);return}t.validators.push({validator:a,classGroupId:n});return}Object.entries(a).forEach(([i,u])=>{s5(u,G7(t,i),n,r)})})},G7=(e,t)=>{let n=e;return t.split(Qv).forEach(r=>{n.nextPart.has(r)||n.nextPart.set(r,{nextPart:new Map,validators:[]}),n=n.nextPart.get(r)}),n},sM=e=>e.isThemeGetter,uM=(e,t)=>t?e.map(([n,r])=>{const a=r.map(i=>typeof i=="string"?t+i:typeof i=="object"?Object.fromEntries(Object.entries(i).map(([u,l])=>[t+u,l])):i);return[n,a]}):e,lM=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,n=new Map,r=new Map;const a=(i,u)=>{n.set(i,u),t++,t>e&&(t=0,r=n,n=new Map)};return{get(i){let u=n.get(i);if(u!==void 0)return u;if((u=r.get(i))!==void 0)return a(i,u),u},set(i,u){n.has(i)?n.set(i,u):a(i,u)}}},vO="!",cM=e=>{const{separator:t,experimentalParseClassName:n}=e,r=t.length===1,a=t[0],i=t.length,u=l=>{const c=[];let m=0,f=0,d;for(let y=0;yf?d-f:void 0;return{modifiers:c,hasImportantModifier:_,baseClassName:w,maybePostfixModifierPosition:g}};return n?l=>n({className:l,parseClassName:u}):u},pM=e=>{if(e.length<=1)return e;const t=[];let n=[];return e.forEach(r=>{r[0]==="["?(t.push(...n.sort(),r),n=[]):n.push(r)}),t.push(...n.sort()),t},mM=e=>({cache:lM(e.cacheSize),parseClassName:cM(e),...aM(e)}),dM=/\s+/,fM=(e,t)=>{const{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:a}=t,i=[],u=e.trim().split(dM);let l="";for(let c=u.length-1;c>=0;c-=1){const m=u[c],{modifiers:f,hasImportantModifier:d,baseClassName:v,maybePostfixModifierPosition:_}=n(m);let w=!!_,g=r(w?v.substring(0,_):v);if(!g){if(!w){l=m+(l.length>0?" "+l:l);continue}if(g=r(v),!g){l=m+(l.length>0?" "+l:l);continue}w=!1}const y=pM(f).join(":"),b=d?y+vO:y,O=b+g;if(i.includes(O))continue;i.push(O);const C=a(g,w);for(let k=0;k0?" "+l:l)}return l};function vM(){let e=0,t,n,r="";for(;e{if(typeof e=="string")return e;let t,n="";for(let r=0;rd(f),e());return n=mM(m),r=n.cache.get,a=n.cache.set,i=l,l(c)}function l(c){const m=r(c);if(m)return m;const f=fM(c,n);return a(c,f),f}return function(){return i(vM.apply(null,arguments))}}const ut=e=>{const t=n=>n[e]||[];return t.isThemeGetter=!0,t},yO=/^\[(?:([a-z-]+):)?(.+)\]$/i,yM=/^\d+\/\d+$/,_M=new Set(["px","full","screen"]),gM=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,xM=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,wM=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,bM=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,SM=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Qr=e=>Ui(e)||_M.has(e)||yM.test(e),La=e=>Ls(e,"length",TM),Ui=e=>!!e&&!Number.isNaN(Number(e)),Vd=e=>Ls(e,"number",Ui),Du=e=>!!e&&Number.isInteger(Number(e)),PM=e=>e.endsWith("%")&&Ui(e.slice(0,-1)),je=e=>yO.test(e),Ha=e=>gM.test(e),OM=new Set(["length","size","percentage"]),kM=e=>Ls(e,OM,_O),CM=e=>Ls(e,"position",_O),AM=new Set(["image","url"]),EM=e=>Ls(e,AM,qM),RM=e=>Ls(e,"",NM),$u=()=>!0,Ls=(e,t,n)=>{const r=yO.exec(e);return r?r[1]?typeof t=="string"?r[1]===t:t.has(r[1]):n(r[2]):!1},TM=e=>xM.test(e)&&!wM.test(e),_O=()=>!1,NM=e=>bM.test(e),qM=e=>SM.test(e),jM=()=>{const e=ut("colors"),t=ut("spacing"),n=ut("blur"),r=ut("brightness"),a=ut("borderColor"),i=ut("borderRadius"),u=ut("borderSpacing"),l=ut("borderWidth"),c=ut("contrast"),m=ut("grayscale"),f=ut("hueRotate"),d=ut("invert"),v=ut("gap"),_=ut("gradientColorStops"),w=ut("gradientColorStopPositions"),g=ut("inset"),y=ut("margin"),b=ut("opacity"),O=ut("padding"),C=ut("saturate"),k=ut("scale"),P=ut("sepia"),A=ut("skew"),T=ut("space"),q=ut("translate"),j=()=>["auto","contain","none"],B=()=>["auto","hidden","clip","visible","scroll"],$=()=>["auto",je,t],M=()=>[je,t],H=()=>["",Qr,La],F=()=>["auto",Ui,je],V=()=>["bottom","center","left","left-bottom","left-top","right","right-bottom","right-top","top"],K=()=>["solid","dashed","dotted","double","none"],J=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],z=()=>["start","end","center","between","around","evenly","stretch"],Y=()=>["","0",je],Q=()=>["auto","avoid","all","avoid-page","page","left","right","column"],D=()=>[Ui,je];return{cacheSize:500,separator:":",theme:{colors:[$u],spacing:[Qr,La],blur:["none","",Ha,je],brightness:D(),borderColor:[e],borderRadius:["none","","full",Ha,je],borderSpacing:M(),borderWidth:H(),contrast:D(),grayscale:Y(),hueRotate:D(),invert:Y(),gap:M(),gradientColorStops:[e],gradientColorStopPositions:[PM,La],inset:$(),margin:$(),opacity:D(),padding:M(),saturate:D(),scale:D(),sepia:Y(),skew:D(),space:M(),translate:M()},classGroups:{aspect:[{aspect:["auto","square","video",je]}],container:["container"],columns:[{columns:[Ha]}],"break-after":[{"break-after":Q()}],"break-before":[{"break-before":Q()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:[...V(),je]}],overflow:[{overflow:B()}],"overflow-x":[{"overflow-x":B()}],"overflow-y":[{"overflow-y":B()}],overscroll:[{overscroll:j()}],"overscroll-x":[{"overscroll-x":j()}],"overscroll-y":[{"overscroll-y":j()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:[g]}],"inset-x":[{"inset-x":[g]}],"inset-y":[{"inset-y":[g]}],start:[{start:[g]}],end:[{end:[g]}],top:[{top:[g]}],right:[{right:[g]}],bottom:[{bottom:[g]}],left:[{left:[g]}],visibility:["visible","invisible","collapse"],z:[{z:["auto",Du,je]}],basis:[{basis:$()}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["wrap","wrap-reverse","nowrap"]}],flex:[{flex:["1","auto","initial","none",je]}],grow:[{grow:Y()}],shrink:[{shrink:Y()}],order:[{order:["first","last","none",Du,je]}],"grid-cols":[{"grid-cols":[$u]}],"col-start-end":[{col:["auto",{span:["full",Du,je]},je]}],"col-start":[{"col-start":F()}],"col-end":[{"col-end":F()}],"grid-rows":[{"grid-rows":[$u]}],"row-start-end":[{row:["auto",{span:[Du,je]},je]}],"row-start":[{"row-start":F()}],"row-end":[{"row-end":F()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":["auto","min","max","fr",je]}],"auto-rows":[{"auto-rows":["auto","min","max","fr",je]}],gap:[{gap:[v]}],"gap-x":[{"gap-x":[v]}],"gap-y":[{"gap-y":[v]}],"justify-content":[{justify:["normal",...z()]}],"justify-items":[{"justify-items":["start","end","center","stretch"]}],"justify-self":[{"justify-self":["auto","start","end","center","stretch"]}],"align-content":[{content:["normal",...z(),"baseline"]}],"align-items":[{items:["start","end","center","baseline","stretch"]}],"align-self":[{self:["auto","start","end","center","stretch","baseline"]}],"place-content":[{"place-content":[...z(),"baseline"]}],"place-items":[{"place-items":["start","end","center","baseline","stretch"]}],"place-self":[{"place-self":["auto","start","end","center","stretch"]}],p:[{p:[O]}],px:[{px:[O]}],py:[{py:[O]}],ps:[{ps:[O]}],pe:[{pe:[O]}],pt:[{pt:[O]}],pr:[{pr:[O]}],pb:[{pb:[O]}],pl:[{pl:[O]}],m:[{m:[y]}],mx:[{mx:[y]}],my:[{my:[y]}],ms:[{ms:[y]}],me:[{me:[y]}],mt:[{mt:[y]}],mr:[{mr:[y]}],mb:[{mb:[y]}],ml:[{ml:[y]}],"space-x":[{"space-x":[T]}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":[T]}],"space-y-reverse":["space-y-reverse"],w:[{w:["auto","min","max","fit","svw","lvw","dvw",je,t]}],"min-w":[{"min-w":[je,t,"min","max","fit"]}],"max-w":[{"max-w":[je,t,"none","full","min","max","fit","prose",{screen:[Ha]},Ha]}],h:[{h:[je,t,"auto","min","max","fit","svh","lvh","dvh"]}],"min-h":[{"min-h":[je,t,"min","max","fit","svh","lvh","dvh"]}],"max-h":[{"max-h":[je,t,"min","max","fit","svh","lvh","dvh"]}],size:[{size:[je,t,"auto","min","max","fit"]}],"font-size":[{text:["base",Ha,La]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:["thin","extralight","light","normal","medium","semibold","bold","extrabold","black",Vd]}],"font-family":[{font:[$u]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:["tighter","tight","normal","wide","wider","widest",je]}],"line-clamp":[{"line-clamp":["none",Ui,Vd]}],leading:[{leading:["none","tight","snug","normal","relaxed","loose",Qr,je]}],"list-image":[{"list-image":["none",je]}],"list-style-type":[{list:["none","disc","decimal",je]}],"list-style-position":[{list:["inside","outside"]}],"placeholder-color":[{placeholder:[e]}],"placeholder-opacity":[{"placeholder-opacity":[b]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"text-color":[{text:[e]}],"text-opacity":[{"text-opacity":[b]}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...K(),"wavy"]}],"text-decoration-thickness":[{decoration:["auto","from-font",Qr,La]}],"underline-offset":[{"underline-offset":["auto",Qr,je]}],"text-decoration-color":[{decoration:[e]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:M()}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",je]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",je]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-opacity":[{"bg-opacity":[b]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:[...V(),CM]}],"bg-repeat":[{bg:["no-repeat",{repeat:["","x","y","round","space"]}]}],"bg-size":[{bg:["auto","cover","contain",kM]}],"bg-image":[{bg:["none",{"gradient-to":["t","tr","r","br","b","bl","l","tl"]},EM]}],"bg-color":[{bg:[e]}],"gradient-from-pos":[{from:[w]}],"gradient-via-pos":[{via:[w]}],"gradient-to-pos":[{to:[w]}],"gradient-from":[{from:[_]}],"gradient-via":[{via:[_]}],"gradient-to":[{to:[_]}],rounded:[{rounded:[i]}],"rounded-s":[{"rounded-s":[i]}],"rounded-e":[{"rounded-e":[i]}],"rounded-t":[{"rounded-t":[i]}],"rounded-r":[{"rounded-r":[i]}],"rounded-b":[{"rounded-b":[i]}],"rounded-l":[{"rounded-l":[i]}],"rounded-ss":[{"rounded-ss":[i]}],"rounded-se":[{"rounded-se":[i]}],"rounded-ee":[{"rounded-ee":[i]}],"rounded-es":[{"rounded-es":[i]}],"rounded-tl":[{"rounded-tl":[i]}],"rounded-tr":[{"rounded-tr":[i]}],"rounded-br":[{"rounded-br":[i]}],"rounded-bl":[{"rounded-bl":[i]}],"border-w":[{border:[l]}],"border-w-x":[{"border-x":[l]}],"border-w-y":[{"border-y":[l]}],"border-w-s":[{"border-s":[l]}],"border-w-e":[{"border-e":[l]}],"border-w-t":[{"border-t":[l]}],"border-w-r":[{"border-r":[l]}],"border-w-b":[{"border-b":[l]}],"border-w-l":[{"border-l":[l]}],"border-opacity":[{"border-opacity":[b]}],"border-style":[{border:[...K(),"hidden"]}],"divide-x":[{"divide-x":[l]}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":[l]}],"divide-y-reverse":["divide-y-reverse"],"divide-opacity":[{"divide-opacity":[b]}],"divide-style":[{divide:K()}],"border-color":[{border:[a]}],"border-color-x":[{"border-x":[a]}],"border-color-y":[{"border-y":[a]}],"border-color-s":[{"border-s":[a]}],"border-color-e":[{"border-e":[a]}],"border-color-t":[{"border-t":[a]}],"border-color-r":[{"border-r":[a]}],"border-color-b":[{"border-b":[a]}],"border-color-l":[{"border-l":[a]}],"divide-color":[{divide:[a]}],"outline-style":[{outline:["",...K()]}],"outline-offset":[{"outline-offset":[Qr,je]}],"outline-w":[{outline:[Qr,La]}],"outline-color":[{outline:[e]}],"ring-w":[{ring:H()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:[e]}],"ring-opacity":[{"ring-opacity":[b]}],"ring-offset-w":[{"ring-offset":[Qr,La]}],"ring-offset-color":[{"ring-offset":[e]}],shadow:[{shadow:["","inner","none",Ha,RM]}],"shadow-color":[{shadow:[$u]}],opacity:[{opacity:[b]}],"mix-blend":[{"mix-blend":[...J(),"plus-lighter","plus-darker"]}],"bg-blend":[{"bg-blend":J()}],filter:[{filter:["","none"]}],blur:[{blur:[n]}],brightness:[{brightness:[r]}],contrast:[{contrast:[c]}],"drop-shadow":[{"drop-shadow":["","none",Ha,je]}],grayscale:[{grayscale:[m]}],"hue-rotate":[{"hue-rotate":[f]}],invert:[{invert:[d]}],saturate:[{saturate:[C]}],sepia:[{sepia:[P]}],"backdrop-filter":[{"backdrop-filter":["","none"]}],"backdrop-blur":[{"backdrop-blur":[n]}],"backdrop-brightness":[{"backdrop-brightness":[r]}],"backdrop-contrast":[{"backdrop-contrast":[c]}],"backdrop-grayscale":[{"backdrop-grayscale":[m]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[f]}],"backdrop-invert":[{"backdrop-invert":[d]}],"backdrop-opacity":[{"backdrop-opacity":[b]}],"backdrop-saturate":[{"backdrop-saturate":[C]}],"backdrop-sepia":[{"backdrop-sepia":[P]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":[u]}],"border-spacing-x":[{"border-spacing-x":[u]}],"border-spacing-y":[{"border-spacing-y":[u]}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["none","all","","colors","opacity","shadow","transform",je]}],duration:[{duration:D()}],ease:[{ease:["linear","in","out","in-out",je]}],delay:[{delay:D()}],animate:[{animate:["none","spin","ping","pulse","bounce",je]}],transform:[{transform:["","gpu","none"]}],scale:[{scale:[k]}],"scale-x":[{"scale-x":[k]}],"scale-y":[{"scale-y":[k]}],rotate:[{rotate:[Du,je]}],"translate-x":[{"translate-x":[q]}],"translate-y":[{"translate-y":[q]}],"skew-x":[{"skew-x":[A]}],"skew-y":[{"skew-y":[A]}],"transform-origin":[{origin:["center","top","top-right","right","bottom-right","bottom","bottom-left","left","top-left",je]}],accent:[{accent:["auto",e]}],appearance:[{appearance:["none","auto"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",je]}],"caret-color":[{caret:[e]}],"pointer-events":[{"pointer-events":["none","auto"]}],resize:[{resize:["none","y","x",""]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scroll-m":[{"scroll-m":M()}],"scroll-mx":[{"scroll-mx":M()}],"scroll-my":[{"scroll-my":M()}],"scroll-ms":[{"scroll-ms":M()}],"scroll-me":[{"scroll-me":M()}],"scroll-mt":[{"scroll-mt":M()}],"scroll-mr":[{"scroll-mr":M()}],"scroll-mb":[{"scroll-mb":M()}],"scroll-ml":[{"scroll-ml":M()}],"scroll-p":[{"scroll-p":M()}],"scroll-px":[{"scroll-px":M()}],"scroll-py":[{"scroll-py":M()}],"scroll-ps":[{"scroll-ps":M()}],"scroll-pe":[{"scroll-pe":M()}],"scroll-pt":[{"scroll-pt":M()}],"scroll-pr":[{"scroll-pr":M()}],"scroll-pb":[{"scroll-pb":M()}],"scroll-pl":[{"scroll-pl":M()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",je]}],fill:[{fill:[e,"none"]}],"stroke-w":[{stroke:[Qr,La,Vd]}],stroke:[{stroke:[e,"none"]}],sr:["sr-only","not-sr-only"],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-s","border-w-e","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-s","border-color-e","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]}}},MM=hM(jM);function Je(...e){return MM(Ie(e))}const IM=_j,DM=wj,gO=R.forwardRef(({className:e,children:t,...n},r)=>E.jsxs(UP,{ref:r,className:Je("flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",e),...n,children:[t,E.jsx(bj,{asChild:!0,children:E.jsx(oO,{className:"h-4 w-4 opacity-50"})})]}));gO.displayName=UP.displayName;const xO=R.forwardRef(({className:e,...t},n)=>E.jsx(QP,{ref:n,className:Je("flex cursor-default items-center justify-center py-1",e),...t,children:E.jsx(Kj,{className:"h-4 w-4"})}));xO.displayName=QP.displayName;const wO=R.forwardRef(({className:e,...t},n)=>E.jsx(ZP,{ref:n,className:Je("flex cursor-default items-center justify-center py-1",e),...t,children:E.jsx(oO,{className:"h-4 w-4"})}));wO.displayName=ZP.displayName;const bO=R.forwardRef(({className:e,children:t,position:n="popper",...r},a)=>(R.useEffect(()=>{const i=()=>{document.querySelectorAll("[data-radix-popper-content-wrapper]").forEach(c=>{const m=c;m.style.setProperty("--popover","0 0% 100%"),m.style.setProperty("--popover-foreground","222.2 84% 4.9%"),m.style.setProperty("--border","214.3 31.8% 91.4%"),m.style.setProperty("--background","0 0% 100%"),m.style.setProperty("--foreground","222.2 84% 4.9%"),(document.documentElement.classList.contains("dark")||document.body.classList.contains("dark"))&&(m.style.setProperty("--popover","222.2 84% 4.9%"),m.style.setProperty("--popover-foreground","210 40% 98%"),m.style.setProperty("--border","217.2 32.6% 17.5%"),m.style.setProperty("--background","222.2 84% 4.9%"),m.style.setProperty("--foreground","210 40% 98%"))})};i();const u=setTimeout(i,100);return()=>clearTimeout(u)}),E.jsx(kj,{children:E.jsxs(WP,{ref:a,className:Je("relative z-50 max-h-96 min-w-[8rem] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",n==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",e),position:n,...r,children:[E.jsx(xO,{}),E.jsx(Nj,{className:Je("p-1",n==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:t}),E.jsx(wO,{})]})})));bO.displayName=WP.displayName;const $M=R.forwardRef(({className:e,...t},n)=>E.jsx(KP,{ref:n,className:Je("py-1.5 pl-8 pr-2 text-sm font-semibold",e),...t}));$M.displayName=KP.displayName;const SO=R.forwardRef(({className:e,children:t,...n},r)=>E.jsxs(YP,{ref:r,className:Je("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",e),...n,children:[E.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:E.jsx(Lj,{children:E.jsx(Vj,{className:"h-4 w-4"})})}),E.jsx(Dj,{children:t})]}));SO.displayName=YP.displayName;const LM=R.forwardRef(({className:e,...t},n)=>E.jsx(eO,{ref:n,className:Je("-mx-1 my-1 h-px bg-muted",e),...t}));LM.displayName=eO.displayName;const F7=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,B7=Ie,PO=(e,t)=>n=>{var r;if((t==null?void 0:t.variants)==null)return B7(e,n==null?void 0:n.class,n==null?void 0:n.className);const{variants:a,defaultVariants:i}=t,u=Object.keys(a).map(m=>{const f=n==null?void 0:n[m],d=i==null?void 0:i[m];if(f===null)return null;const v=F7(f)||F7(d);return a[m][v]}),l=n&&Object.entries(n).reduce((m,f)=>{let[d,v]=f;return v===void 0||(m[d]=v),m},{}),c=t==null||(r=t.compoundVariants)===null||r===void 0?void 0:r.reduce((m,f)=>{let{class:d,className:v,..._}=f;return Object.entries(_).every(w=>{let[g,y]=w;return Array.isArray(y)?y.includes({...i,...l}[g]):{...i,...l}[g]===y})?[...m,d,v]:m},[]);return B7(e,u,c,n==null?void 0:n.class,n==null?void 0:n.className)},HM=PO("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function GM({className:e,variant:t,...n}){return E.jsx("div",{className:Je(HM({variant:t}),e),...n})}const FM=PO("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),Wp=R.forwardRef(({className:e,variant:t,size:n,asChild:r=!1,...a},i)=>{const u=r?CT:"button";return E.jsx(u,{className:Je(FM({variant:t,size:n,className:e})),ref:i,...a})});Wp.displayName="Button";const BM=({selectedVersion:e,availableVersions:t,onVersionChange:n,metadata:r,onDownloadReport:a})=>{const i=f=>{try{return new Date(f).toLocaleDateString()}catch{return f}},u=f=>`https://github.com/envoyproxy/gateway/releases/tag/v${f}`,l=f=>`https://github.com/envoyproxy/gateway/releases/download/v${f}/benchmark_report.zip`,c=()=>{const f=u(e);window.open(f,"_blank","noopener,noreferrer")},m=()=>{const f=l(e);window.open(f,"_blank","noopener,noreferrer")};return E.jsxs("div",{className:"flex flex-col sm:flex-row items-start sm:items-center gap-3",children:[E.jsxs("div",{className:"flex items-center gap-2",children:[E.jsx("label",{className:"text-sm font-medium text-gray-700",children:"Version:"}),E.jsxs(IM,{value:e,onValueChange:n,children:[E.jsx(gO,{className:"w-32",children:E.jsx(DM,{})}),E.jsx(bO,{children:t.map(f=>E.jsxs(SO,{value:f,children:["v",f]},f))})]})]}),r&&E.jsxs("div",{className:"flex flex-wrap items-center gap-2 text-xs text-gray-600",children:[E.jsxs("div",{className:"flex items-center gap-1",children:[E.jsx(Wj,{className:"h-3 w-3"}),E.jsx("span",{children:i(r.date)})]}),r.environment&&E.jsx(GM,{variant:"secondary",className:"text-xs",children:r.environment}),r.gitCommit&&E.jsxs("div",{className:"flex items-center gap-1",children:[E.jsx(lO,{className:"h-3 w-3"}),E.jsx("span",{className:"font-mono",children:r.gitCommit.substring(0,7)})]}),r.description&&E.jsx("span",{className:"hidden sm:inline max-w-xs truncate",title:r.description,children:r.description})]}),E.jsxs("div",{className:"flex items-center gap-2 ml-auto",children:[E.jsxs(Wp,{variant:"outline",size:"sm",onClick:c,className:"flex items-center gap-1 text-xs",children:[E.jsx(Qj,{className:"h-3 w-3"}),"View Release"]}),E.jsxs(Wp,{variant:"outline",size:"sm",onClick:m,className:"flex items-center gap-1 text-xs",children:[E.jsx(aO,{className:"h-3 w-3"}),"Download Benchmark"]})]})]})},Ke=R.forwardRef(({className:e,...t},n)=>E.jsx("div",{ref:n,className:Je("rounded-lg border bg-card text-card-foreground shadow-sm",e),...t}));Ke.displayName="Card";const Ze=R.forwardRef(({className:e,...t},n)=>E.jsx("div",{ref:n,className:Je("flex flex-col space-y-1.5 p-6",e),...t}));Ze.displayName="CardHeader";const Xe=R.forwardRef(({className:e,...t},n)=>E.jsx("h3",{ref:n,className:Je("text-2xl font-semibold leading-none tracking-tight",e),...t}));Xe.displayName="CardTitle";const jn=R.forwardRef(({className:e,...t},n)=>E.jsx("p",{ref:n,className:Je("text-sm text-muted-foreground",e),...t}));jn.displayName="CardDescription";const Ye=R.forwardRef(({className:e,...t},n)=>E.jsx("div",{ref:n,className:Je("p-6 pt-0",e),...t}));Ye.displayName="CardContent";const zM=R.forwardRef(({className:e,...t},n)=>E.jsx("div",{ref:n,className:Je("flex items-center p-6 pt-0",e),...t}));zM.displayName="CardFooter";const UM=({performanceSummary:e,benchmarkResults:t})=>{const n=Math.round(Math.max(...t.map(u=>u.throughput))),r=Math.round(e.avgLatency),a=Math.round(Math.max(...t.map(u=>u.resources.envoyGateway.memory.mean+u.resources.envoyProxy.memory.mean))),i=e.maxRoutes;return E.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4 mb-8",children:[E.jsxs(Ke,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[E.jsx(Ze,{className:"pb-2",children:E.jsxs(Xe,{className:"text-sm font-medium flex items-center",children:[E.jsx(Uj,{className:"h-4 w-4 mr-2"}),"Max Throughput in Test"]})}),E.jsxs(Ye,{children:[E.jsxs("div",{className:"text-2xl font-bold",children:[n.toLocaleString()," RPS"]}),E.jsx("p",{className:"text-purple-100 text-sm",children:"Requests per second"})]})]}),E.jsxs(Ke,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[E.jsx(Ze,{className:"pb-2",children:E.jsxs(Xe,{className:"text-sm font-medium flex items-center",children:[E.jsx(sO,{className:"h-4 w-4 mr-2"}),"Mean Response Time"]})}),E.jsxs(Ye,{children:[E.jsxs("div",{className:"text-2xl font-bold",children:[r,"ms"]}),E.jsx("p",{className:"text-purple-100 text-sm",children:"End-to-end via Nighthawk"})]})]}),E.jsxs(Ke,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[E.jsx(Ze,{className:"pb-2",children:E.jsxs(Xe,{className:"text-sm font-medium flex items-center",children:[E.jsx(Jj,{className:"h-4 w-4 mr-2"}),"Memory Usage"]})}),E.jsxs(Ye,{children:[E.jsxs("div",{className:"text-2xl font-bold",children:[a,"MB"]}),E.jsxs("p",{className:"text-purple-100 text-sm",children:["Peak at ",i," routes"]})]})]}),E.jsxs(Ke,{className:"bg-gradient-to-r from-purple-600 to-indigo-600 text-white",children:[E.jsx(Ze,{className:"pb-2",children:E.jsxs(Xe,{className:"text-sm font-medium flex items-center text",children:[E.jsx(pO,{className:"h-4 w-4 mr-2"}),"Max Routes in Test"]})}),E.jsxs(Ye,{children:[E.jsx("div",{className:"text-2xl font-bold",children:i.toLocaleString()}),E.jsx("p",{className:"text-purple-100 text-sm",children:"HTTPRoutes tested"})]})]})]})};var Kd,z7;function Pn(){if(z7)return Kd;z7=1;var e=Array.isArray;return Kd=e,Kd}var Xd,U7;function OO(){if(U7)return Xd;U7=1;var e=typeof dp=="object"&&dp&&dp.Object===Object&&dp;return Xd=e,Xd}var Yd,W7;function Fr(){if(W7)return Yd;W7=1;var e=OO(),t=typeof self=="object"&&self&&self.Object===Object&&self,n=e||t||Function("return this")();return Yd=n,Yd}var Qd,V7;function Zl(){if(V7)return Qd;V7=1;var e=Fr(),t=e.Symbol;return Qd=t,Qd}var Zd,K7;function WM(){if(K7)return Zd;K7=1;var e=Zl(),t=Object.prototype,n=t.hasOwnProperty,r=t.toString,a=e?e.toStringTag:void 0;function i(u){var l=n.call(u,a),c=u[a];try{u[a]=void 0;var m=!0}catch{}var f=r.call(u);return m&&(l?u[a]=c:delete u[a]),f}return Zd=i,Zd}var Jd,X7;function VM(){if(X7)return Jd;X7=1;var e=Object.prototype,t=e.toString;function n(r){return t.call(r)}return Jd=n,Jd}var e3,Y7;function ha(){if(Y7)return e3;Y7=1;var e=Zl(),t=WM(),n=VM(),r="[object Null]",a="[object Undefined]",i=e?e.toStringTag:void 0;function u(l){return l==null?l===void 0?a:r:i&&i in Object(l)?t(l):n(l)}return e3=u,e3}var t3,Q7;function ya(){if(Q7)return t3;Q7=1;function e(t){return t!=null&&typeof t=="object"}return t3=e,t3}var n3,Z7;function Hs(){if(Z7)return n3;Z7=1;var e=ha(),t=ya(),n="[object Symbol]";function r(a){return typeof a=="symbol"||t(a)&&e(a)==n}return n3=r,n3}var r3,J7;function Zv(){if(J7)return r3;J7=1;var e=Pn(),t=Hs(),n=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,r=/^\w*$/;function a(i,u){if(e(i))return!1;var l=typeof i;return l=="number"||l=="symbol"||l=="boolean"||i==null||t(i)?!0:r.test(i)||!n.test(i)||u!=null&&i in Object(u)}return r3=a,r3}var a3,e8;function io(){if(e8)return a3;e8=1;function e(t){var n=typeof t;return t!=null&&(n=="object"||n=="function")}return a3=e,a3}var o3,t8;function Jv(){if(t8)return o3;t8=1;var e=ha(),t=io(),n="[object AsyncFunction]",r="[object Function]",a="[object GeneratorFunction]",i="[object Proxy]";function u(l){if(!t(l))return!1;var c=e(l);return c==r||c==a||c==n||c==i}return o3=u,o3}var i3,n8;function KM(){if(n8)return i3;n8=1;var e=Fr(),t=e["__core-js_shared__"];return i3=t,i3}var s3,r8;function XM(){if(r8)return s3;r8=1;var e=KM(),t=(function(){var r=/[^.]+$/.exec(e&&e.keys&&e.keys.IE_PROTO||"");return r?"Symbol(src)_1."+r:""})();function n(r){return!!t&&t in r}return s3=n,s3}var u3,a8;function kO(){if(a8)return u3;a8=1;var e=Function.prototype,t=e.toString;function n(r){if(r!=null){try{return t.call(r)}catch{}try{return r+""}catch{}}return""}return u3=n,u3}var l3,o8;function YM(){if(o8)return l3;o8=1;var e=Jv(),t=XM(),n=io(),r=kO(),a=/[\\^$.*+?()[\]{}|]/g,i=/^\[object .+?Constructor\]$/,u=Function.prototype,l=Object.prototype,c=u.toString,m=l.hasOwnProperty,f=RegExp("^"+c.call(m).replace(a,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function d(v){if(!n(v)||t(v))return!1;var _=e(v)?f:i;return _.test(r(v))}return l3=d,l3}var c3,i8;function QM(){if(i8)return c3;i8=1;function e(t,n){return t==null?void 0:t[n]}return c3=e,c3}var p3,s8;function ti(){if(s8)return p3;s8=1;var e=YM(),t=QM();function n(r,a){var i=t(r,a);return e(i)?i:void 0}return p3=n,p3}var m3,u8;function i0(){if(u8)return m3;u8=1;var e=ti(),t=e(Object,"create");return m3=t,m3}var d3,l8;function ZM(){if(l8)return d3;l8=1;var e=i0();function t(){this.__data__=e?e(null):{},this.size=0}return d3=t,d3}var f3,c8;function JM(){if(c8)return f3;c8=1;function e(t){var n=this.has(t)&&delete this.__data__[t];return this.size-=n?1:0,n}return f3=e,f3}var v3,p8;function eI(){if(p8)return v3;p8=1;var e=i0(),t="__lodash_hash_undefined__",n=Object.prototype,r=n.hasOwnProperty;function a(i){var u=this.__data__;if(e){var l=u[i];return l===t?void 0:l}return r.call(u,i)?u[i]:void 0}return v3=a,v3}var h3,m8;function tI(){if(m8)return h3;m8=1;var e=i0(),t=Object.prototype,n=t.hasOwnProperty;function r(a){var i=this.__data__;return e?i[a]!==void 0:n.call(i,a)}return h3=r,h3}var y3,d8;function nI(){if(d8)return y3;d8=1;var e=i0(),t="__lodash_hash_undefined__";function n(r,a){var i=this.__data__;return this.size+=this.has(r)?0:1,i[r]=e&&a===void 0?t:a,this}return y3=n,y3}var _3,f8;function rI(){if(f8)return _3;f8=1;var e=ZM(),t=JM(),n=eI(),r=tI(),a=nI();function i(u){var l=-1,c=u==null?0:u.length;for(this.clear();++l-1}return P3=t,P3}var O3,w8;function uI(){if(w8)return O3;w8=1;var e=s0();function t(n,r){var a=this.__data__,i=e(a,n);return i<0?(++this.size,a.push([n,r])):a[i][1]=r,this}return O3=t,O3}var k3,b8;function u0(){if(b8)return k3;b8=1;var e=aI(),t=oI(),n=iI(),r=sI(),a=uI();function i(u){var l=-1,c=u==null?0:u.length;for(this.clear();++l0?1:-1},eo=function(t){return Oo(t)&&t.indexOf("%")===t.length-1},V=function(t){return _M(t)&&!Ps(t)},SM=function(t){return ne(t)},it=function(t){return V(t)||Oo(t)},PM=0,$o=function(t){var n=++PM;return"".concat(t||"").concat(n)},ko=function(t,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(!V(t)&&!Oo(t))return r;var o;if(eo(t)){var i=t.indexOf("%");o=n*parseFloat(t.slice(0,i))/100}else o=+t;return Ps(o)&&(o=r),a&&o>n&&(o=n),o},oa=function(t){if(!t)return null;var n=Object.keys(t);return n&&n.length?t[n[0]]:null},OM=function(t){if(!Array.isArray(t))return!1;for(var n=t.length,r={},a=0;a=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function RM(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function f3(e){"@babel/helpers - typeof";return f3=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},f3(e)}var y2={click:"onClick",mousedown:"onMouseDown",mouseup:"onMouseUp",mouseover:"onMouseOver",mousemove:"onMouseMove",mouseout:"onMouseOut",mouseenter:"onMouseEnter",mouseleave:"onMouseLeave",touchcancel:"onTouchCancel",touchend:"onTouchEnd",touchmove:"onTouchMove",touchstart:"onTouchStart",contextmenu:"onContextMenu",dblclick:"onDoubleClick"},Nr=function(t){return typeof t=="string"?t:t?t.displayName||t.name||"Component":""},g2=null,qm=null,f9=function e(t){if(t===g2&&Array.isArray(qm))return qm;var n=[];return P.Children.forEach(t,function(r){ne(r)||(fM.isFragment(r)?n=n.concat(e(r.props.children)):n.push(r))}),qm=n,g2=t,n};function Wt(e,t){var n=[],r=[];return Array.isArray(t)?r=t.map(function(a){return Nr(a)}):r=[Nr(t)],f9(e).forEach(function(a){var o=_n(a,"type.displayName")||_n(a,"type.name");r.indexOf(o)!==-1&&n.push(a)}),n}function Qt(e,t){var n=Wt(e,t);return n&&n[0]}var _2=function(t){if(!t||!t.props)return!1;var n=t.props,r=n.width,a=n.height;return!(!V(r)||r<=0||!V(a)||a<=0)},$M=["a","altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","ellipse","feBlend","feColormatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-url","foreignObject","g","glyph","glyphRef","hkern","image","line","lineGradient","marker","mask","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","script","set","stop","style","svg","switch","symbol","text","textPath","title","tref","tspan","use","view","vkern"],MM=function(t){return t&&t.type&&Oo(t.type)&&$M.indexOf(t.type)>=0},Tx=function(t){return t&&f3(t)==="object"&&"clipDot"in t},qM=function(t,n,r,a){var o,i=(o=Mm==null?void 0:Mm[a])!==null&&o!==void 0?o:[];return n.startsWith("data-")||!oe(t)&&(a&&i.includes(n)||EM.includes(n))||r&&d9.includes(n)},ae=function(t,n,r){if(!t||typeof t=="function"||typeof t=="boolean")return null;var a=t;if(P.isValidElement(t)&&(a=t.props),!xs(a))return null;var o={};return Object.keys(a).forEach(function(i){var s;qM((s=a)===null||s===void 0?void 0:s[i],i,n,r)&&(o[i]=a[i])}),o},v3=function e(t,n){if(t===n)return!0;var r=P.Children.count(t);if(r!==P.Children.count(n))return!1;if(r===0)return!0;if(r===1)return x2(Array.isArray(t)?t[0]:t,Array.isArray(n)?n[0]:n);for(var a=0;a=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function GM(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function y3(e){var t=e.children,n=e.width,r=e.height,a=e.viewBox,o=e.className,i=e.style,s=e.title,u=e.desc,l=HM(e,LM),p=a||{width:n,height:r,x:0,y:0},c=le("recharts-surface",o);return E.createElement("svg",h3({},ae(l,!0,"svg"),{className:c,width:n,height:r,style:i,viewBox:"".concat(p.x," ").concat(p.y," ").concat(p.width," ").concat(p.height)}),E.createElement("title",null,s),E.createElement("desc",null,u),t)}var BM=["children","className"];function g3(){return g3=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zM(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var ye=E.forwardRef(function(e,t){var n=e.children,r=e.className,a=FM(e,BM),o=le("recharts-layer",r);return E.createElement("g",g3({className:o},ae(a,!0),{ref:t}),n)}),Tr=function(t,n){for(var r=arguments.length,a=new Array(r>2?r-2:0),o=2;oa?0:a+t),n=n>a?a:n,n<0&&(n+=a),a=t>n?0:n-t>>>0,t>>>=0;for(var o=Array(a);++r=r?e:VM(e,t,n)}var XM=KM,YM="\\ud800-\\udfff",QM="\\u0300-\\u036f",ZM="\\ufe20-\\ufe2f",JM="\\u20d0-\\u20ff",eq=QM+ZM+JM,tq="\\ufe0e\\ufe0f",nq="\\u200d",rq=RegExp("["+nq+YM+eq+tq+"]");function aq(e){return rq.test(e)}var jx=aq;function oq(e){return e.split("")}var iq=oq,Rx="\\ud800-\\udfff",sq="\\u0300-\\u036f",uq="\\ufe20-\\ufe2f",lq="\\u20d0-\\u20ff",cq=sq+uq+lq,pq="\\ufe0e\\ufe0f",mq="["+Rx+"]",_3="["+cq+"]",x3="\\ud83c[\\udffb-\\udfff]",dq="(?:"+_3+"|"+x3+")",$x="[^"+Rx+"]",Mx="(?:\\ud83c[\\udde6-\\uddff]){2}",qx="[\\ud800-\\udbff][\\udc00-\\udfff]",fq="\\u200d",Ix=dq+"?",Dx="["+pq+"]?",vq="(?:"+fq+"(?:"+[$x,Mx,qx].join("|")+")"+Dx+Ix+")*",hq=Dx+Ix+vq,yq="(?:"+[$x+_3+"?",_3,Mx,qx,mq].join("|")+")",gq=RegExp(x3+"(?="+x3+")|"+yq+hq,"g");function _q(e){return e.match(gq)||[]}var xq=_q,wq=iq,bq=jx,Sq=xq;function Pq(e){return bq(e)?Sq(e):wq(e)}var Oq=Pq,kq=XM,Cq=jx,Aq=Oq,Eq=Ox;function Nq(e){return function(t){t=Eq(t);var n=Cq(t)?Aq(t):void 0,r=n?n[0]:t.charAt(0),a=n?kq(n,1).join(""):t.slice(1);return r[e]()+a}}var Tq=Nq,jq=Tq,Rq=jq("toUpperCase"),$q=Rq;const v1=Ae($q);function Te(e){return function(){return e}}const Lx=Math.cos,kp=Math.sin,Kn=Math.sqrt,Cp=Math.PI,h1=2*Cp,w3=Math.PI,b3=2*w3,Ka=1e-6,Mq=b3-Ka;function Hx(e){this._+=e[0];for(let t=1,n=e.length;t=0))throw new Error(`invalid digits: ${e}`);if(t>15)return Hx;const n=10**t;return function(r){this._+=r[0];for(let a=1,o=r.length;aKa)if(!(Math.abs(c*u-l*p)>Ka)||!o)this._append`L${this._x1=t},${this._y1=n}`;else{let d=r-i,g=a-s,f=u*u+l*l,y=d*d+g*g,v=Math.sqrt(f),h=Math.sqrt(m),_=o*Math.tan((w3-Math.acos((f+m-y)/(2*v*h)))/2),w=_/h,x=_/v;Math.abs(w-1)>Ka&&this._append`L${t+w*p},${n+w*c}`,this._append`A${o},${o},0,0,${+(c*d>p*g)},${this._x1=t+x*u},${this._y1=n+x*l}`}}arc(t,n,r,a,o,i){if(t=+t,n=+n,r=+r,i=!!i,r<0)throw new Error(`negative radius: ${r}`);let s=r*Math.cos(a),u=r*Math.sin(a),l=t+s,p=n+u,c=1^i,m=i?a-o:o-a;this._x1===null?this._append`M${l},${p}`:(Math.abs(this._x1-l)>Ka||Math.abs(this._y1-p)>Ka)&&this._append`L${l},${p}`,r&&(m<0&&(m=m%b3+b3),m>Mq?this._append`A${r},${r},0,1,${c},${t-s},${n-u}A${r},${r},0,1,${c},${this._x1=l},${this._y1=p}`:m>Ka&&this._append`A${r},${r},0,${+(m>=w3)},${c},${this._x1=t+r*Math.cos(o)},${this._y1=n+r*Math.sin(o)}`)}rect(t,n,r,a){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+n}h${r=+r}v${+a}h${-r}Z`}toString(){return this._}}function v9(e){let t=3;return e.digits=function(n){if(!arguments.length)return t;if(n==null)t=null;else{const r=Math.floor(n);if(!(r>=0))throw new RangeError(`invalid digits: ${n}`);t=r}return e},()=>new Iq(t)}function h9(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function Gx(e){this._context=e}Gx.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function y1(e){return new Gx(e)}function Bx(e){return e[0]}function Fx(e){return e[1]}function zx(e,t){var n=Te(!0),r=null,a=y1,o=null,i=v9(s);e=typeof e=="function"?e:e===void 0?Bx:Te(e),t=typeof t=="function"?t:t===void 0?Fx:Te(t);function s(u){var l,p=(u=h9(u)).length,c,m=!1,d;for(r==null&&(o=a(d=i())),l=0;l<=p;++l)!(l=d;--g)s.point(_[g],w[g]);s.lineEnd(),s.areaEnd()}v&&(_[m]=+e(y,m,c),w[m]=+t(y,m,c),s.point(r?+r(y,m,c):_[m],n?+n(y,m,c):w[m]))}if(h)return s=null,h+""||null}function p(){return zx().defined(a).curve(i).context(o)}return l.x=function(c){return arguments.length?(e=typeof c=="function"?c:Te(+c),r=null,l):e},l.x0=function(c){return arguments.length?(e=typeof c=="function"?c:Te(+c),l):e},l.x1=function(c){return arguments.length?(r=c==null?null:typeof c=="function"?c:Te(+c),l):r},l.y=function(c){return arguments.length?(t=typeof c=="function"?c:Te(+c),n=null,l):t},l.y0=function(c){return arguments.length?(t=typeof c=="function"?c:Te(+c),l):t},l.y1=function(c){return arguments.length?(n=c==null?null:typeof c=="function"?c:Te(+c),l):n},l.lineX0=l.lineY0=function(){return p().x(e).y(t)},l.lineY1=function(){return p().x(e).y(n)},l.lineX1=function(){return p().x(r).y(t)},l.defined=function(c){return arguments.length?(a=typeof c=="function"?c:Te(!!c),l):a},l.curve=function(c){return arguments.length?(i=c,o!=null&&(s=i(o)),l):i},l.context=function(c){return arguments.length?(c==null?o=s=null:s=i(o=c),l):o},l}class Ux{constructor(t,n){this._context=t,this._x=n}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(t,n){switch(t=+t,n=+n,this._point){case 0:{this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,n,t,n):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+n)/2,t,this._y0,t,n);break}}this._x0=t,this._y0=n}}function Dq(e){return new Ux(e,!0)}function Lq(e){return new Ux(e,!1)}const y9={draw(e,t){const n=Kn(t/Cp);e.moveTo(n,0),e.arc(0,0,n,0,h1)}},Hq={draw(e,t){const n=Kn(t/5)/2;e.moveTo(-3*n,-n),e.lineTo(-n,-n),e.lineTo(-n,-3*n),e.lineTo(n,-3*n),e.lineTo(n,-n),e.lineTo(3*n,-n),e.lineTo(3*n,n),e.lineTo(n,n),e.lineTo(n,3*n),e.lineTo(-n,3*n),e.lineTo(-n,n),e.lineTo(-3*n,n),e.closePath()}},Wx=Kn(1/3),Gq=Wx*2,Bq={draw(e,t){const n=Kn(t/Gq),r=n*Wx;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},Fq={draw(e,t){const n=Kn(t),r=-n/2;e.rect(r,r,n,n)}},zq=.8908130915292852,Vx=kp(Cp/10)/kp(7*Cp/10),Uq=kp(h1/10)*Vx,Wq=-Lx(h1/10)*Vx,Vq={draw(e,t){const n=Kn(t*zq),r=Uq*n,a=Wq*n;e.moveTo(0,-n),e.lineTo(r,a);for(let o=1;o<5;++o){const i=h1*o/5,s=Lx(i),u=kp(i);e.lineTo(u*n,-s*n),e.lineTo(s*r-u*a,u*r+s*a)}e.closePath()}},Im=Kn(3),Kq={draw(e,t){const n=-Kn(t/(Im*3));e.moveTo(0,n*2),e.lineTo(-Im*n,-n),e.lineTo(Im*n,-n),e.closePath()}},ln=-.5,cn=Kn(3)/2,S3=1/Kn(12),Xq=(S3/2+1)*3,Yq={draw(e,t){const n=Kn(t/Xq),r=n/2,a=n*S3,o=r,i=n*S3+n,s=-o,u=i;e.moveTo(r,a),e.lineTo(o,i),e.lineTo(s,u),e.lineTo(ln*r-cn*a,cn*r+ln*a),e.lineTo(ln*o-cn*i,cn*o+ln*i),e.lineTo(ln*s-cn*u,cn*s+ln*u),e.lineTo(ln*r+cn*a,ln*a-cn*r),e.lineTo(ln*o+cn*i,ln*i-cn*o),e.lineTo(ln*s+cn*u,ln*u-cn*s),e.closePath()}};function Qq(e,t){let n=null,r=v9(a);e=typeof e=="function"?e:Te(e||y9),t=typeof t=="function"?t:Te(t===void 0?64:+t);function a(){let o;if(n||(n=o=r()),e.apply(this,arguments).draw(n,+t.apply(this,arguments)),o)return n=null,o+""||null}return a.type=function(o){return arguments.length?(e=typeof o=="function"?o:Te(o),a):e},a.size=function(o){return arguments.length?(t=typeof o=="function"?o:Te(+o),a):t},a.context=function(o){return arguments.length?(n=o??null,a):n},a}function Ap(){}function Ep(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function Kx(e){this._context=e}Kx.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Ep(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Ep(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function Zq(e){return new Kx(e)}function Xx(e){this._context=e}Xx.prototype={areaStart:Ap,areaEnd:Ap,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:Ep(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function Jq(e){return new Xx(e)}function Yx(e){this._context=e}Yx.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:Ep(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function eI(e){return new Yx(e)}function Qx(e){this._context=e}Qx.prototype={areaStart:Ap,areaEnd:Ap,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function tI(e){return new Qx(e)}function b2(e){return e<0?-1:1}function S2(e,t,n){var r=e._x1-e._x0,a=t-e._x1,o=(e._y1-e._y0)/(r||a<0&&-0),i=(n-e._y1)/(a||r<0&&-0),s=(o*a+i*r)/(r+a);return(b2(o)+b2(i))*Math.min(Math.abs(o),Math.abs(i),.5*Math.abs(s))||0}function P2(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function Dm(e,t,n){var r=e._x0,a=e._y0,o=e._x1,i=e._y1,s=(o-r)/3;e._context.bezierCurveTo(r+s,a+s*t,o-s,i-s*n,o,i)}function Np(e){this._context=e}Np.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:Dm(this,this._t0,P2(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var n=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,Dm(this,P2(this,n=S2(this,e,t)),n);break;default:Dm(this,this._t0,n=S2(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=n}}};function Zx(e){this._context=new Jx(e)}(Zx.prototype=Object.create(Np.prototype)).point=function(e,t){Np.prototype.point.call(this,t,e)};function Jx(e){this._context=e}Jx.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,n,r,a,o){this._context.bezierCurveTo(t,e,r,n,o,a)}};function nI(e){return new Np(e)}function rI(e){return new Zx(e)}function ew(e){this._context=e}ew.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,n=e.length;if(n)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),n===2)this._context.lineTo(e[1],t[1]);else for(var r=O2(e),a=O2(t),o=0,i=1;i=0;--t)a[t]=(i[t]-a[t+1])/o[t];for(o[n-1]=(e[n]+a[n-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}break}}this._x=e,this._y=t}};function oI(e){return new g1(e,.5)}function iI(e){return new g1(e,0)}function sI(e){return new g1(e,1)}function Ii(e,t){if((i=e.length)>1)for(var n=1,r,a,o=e[t[0]],i,s=o.length;n=0;)n[t]=t;return n}function uI(e,t){return e[t]}function lI(e){const t=[];return t.key=e,t}function cI(){var e=Te([]),t=P3,n=Ii,r=uI;function a(o){var i=Array.from(e.apply(this,arguments),lI),s,u=i.length,l=-1,p;for(const c of o)for(s=0,++l;s0){for(var n,r,a=0,o=e[0].length,i;a0){for(var n=0,r=e[t[0]],a,o=r.length;n0)||!((o=(a=e[t[0]]).length)>0))){for(var n=0,r=1,a,o,i;r=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _I(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var tw={symbolCircle:y9,symbolCross:Hq,symbolDiamond:Bq,symbolSquare:Fq,symbolStar:Vq,symbolTriangle:Kq,symbolWye:Yq},xI=Math.PI/180,wI=function(t){var n="symbol".concat(v1(t));return tw[n]||y9},bI=function(t,n,r){if(n==="area")return t;switch(r){case"cross":return 5*t*t/9;case"diamond":return .5*t*t/Math.sqrt(3);case"square":return t*t;case"star":{var a=18*xI;return 1.25*t*t*(Math.tan(a)-Math.tan(a*2)*Math.pow(Math.tan(a),2))}case"triangle":return Math.sqrt(3)*t*t/4;case"wye":return(21-10*Math.sqrt(3))*t*t/8;default:return Math.PI*t*t/4}},SI=function(t,n){tw["symbol".concat(v1(t))]=n},_1=function(t){var n=t.type,r=n===void 0?"circle":n,a=t.size,o=a===void 0?64:a,i=t.sizeType,s=i===void 0?"area":i,u=gI(t,fI),l=C2(C2({},u),{},{type:r,size:o,sizeType:s}),p=function(){var y=wI(r),v=Qq().type(y).size(bI(o,s,r));return v()},c=l.className,m=l.cx,d=l.cy,g=ae(l,!0);return m===+m&&d===+d&&o===+o?E.createElement("path",O3({},g,{className:le("recharts-symbols",c),transform:"translate(".concat(m,", ").concat(d,")"),d:p()})):null};_1.registerSymbol=SI;function Di(e){"@babel/helpers - typeof";return Di=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Di(e)}function k3(){return k3=Object.assign?Object.assign.bind():function(e){for(var t=1;t`);var h=d.inactive?l:d.color;return E.createElement("li",k3({className:y,style:c,key:"legend-item-".concat(g)},Lu(r.props,d,g)),E.createElement(y3,{width:i,height:i,viewBox:p,style:m},r.renderIcon(d)),E.createElement("span",{className:"recharts-legend-item-text",style:{color:h}},f?f(v,d,g):v))})}},{key:"render",value:function(){var r=this.props,a=r.payload,o=r.layout,i=r.align;if(!a||!a.length)return null;var s={padding:0,margin:0,textAlign:o==="horizontal"?i:"left"};return E.createElement("ul",{className:"recharts-default-legend",style:s},this.renderItems())}}])}(P.PureComponent);Gu(g9,"displayName","Legend");Gu(g9,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"middle",inactiveColor:"#ccc"});var RI=n1;function $I(){this.__data__=new RI,this.size=0}var MI=$I;function qI(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}var II=qI;function DI(e){return this.__data__.get(e)}var LI=DI;function HI(e){return this.__data__.has(e)}var GI=HI,BI=n1,FI=i9,zI=s9,UI=200;function WI(e,t){var n=this.__data__;if(n instanceof BI){var r=n.__data__;if(!FI||r.lengths))return!1;var l=o.get(e),p=o.get(t);if(l&&p)return l==t&&p==e;var c=-1,m=!0,d=n&fD?new cD:void 0;for(o.set(e,t),o.set(t,e);++c-1&&e%1==0&&e-1&&e%1==0&&e<=gL}var b9=_L,xL=zr,wL=b9,bL=Ur,SL="[object Arguments]",PL="[object Array]",OL="[object Boolean]",kL="[object Date]",CL="[object Error]",AL="[object Function]",EL="[object Map]",NL="[object Number]",TL="[object Object]",jL="[object RegExp]",RL="[object Set]",$L="[object String]",ML="[object WeakMap]",qL="[object ArrayBuffer]",IL="[object DataView]",DL="[object Float32Array]",LL="[object Float64Array]",HL="[object Int8Array]",GL="[object Int16Array]",BL="[object Int32Array]",FL="[object Uint8Array]",zL="[object Uint8ClampedArray]",UL="[object Uint16Array]",WL="[object Uint32Array]",Ie={};Ie[DL]=Ie[LL]=Ie[HL]=Ie[GL]=Ie[BL]=Ie[FL]=Ie[zL]=Ie[UL]=Ie[WL]=!0;Ie[SL]=Ie[PL]=Ie[qL]=Ie[OL]=Ie[IL]=Ie[kL]=Ie[CL]=Ie[AL]=Ie[EL]=Ie[NL]=Ie[TL]=Ie[jL]=Ie[RL]=Ie[$L]=Ie[ML]=!1;function VL(e){return bL(e)&&wL(e.length)&&!!Ie[xL(e)]}var KL=VL;function XL(e){return function(t){return e(t)}}var mw=XL,$p={exports:{}};$p.exports;(function(e,t){var n=_x,r=t&&!t.nodeType&&t,a=r&&!0&&e&&!e.nodeType&&e,o=a&&a.exports===r,i=o&&n.process,s=function(){try{var u=a&&a.require&&a.require("util").types;return u||i&&i.binding&&i.binding("util")}catch{}}();e.exports=s})($p,$p.exports);var YL=$p.exports,QL=KL,ZL=mw,$2=YL,M2=$2&&$2.isTypedArray,JL=M2?ZL(M2):QL,dw=JL,eH=rL,tH=x9,nH=Vt,rH=pw,aH=w9,oH=dw,iH=Object.prototype,sH=iH.hasOwnProperty;function uH(e,t){var n=nH(e),r=!n&&tH(e),a=!n&&!r&&rH(e),o=!n&&!r&&!a&&oH(e),i=n||r||a||o,s=i?eH(e.length,String):[],u=s.length;for(var l in e)(t||sH.call(e,l))&&!(i&&(l=="length"||a&&(l=="offset"||l=="parent")||o&&(l=="buffer"||l=="byteLength"||l=="byteOffset")||aH(l,u)))&&s.push(l);return s}var lH=uH,cH=Object.prototype;function pH(e){var t=e&&e.constructor,n=typeof t=="function"&&t.prototype||cH;return e===n}var mH=pH;function dH(e,t){return function(n){return e(t(n))}}var fw=dH,fH=fw,vH=fH(Object.keys,Object),hH=vH,yH=mH,gH=hH,_H=Object.prototype,xH=_H.hasOwnProperty;function wH(e){if(!yH(e))return gH(e);var t=[];for(var n in Object(e))xH.call(e,n)&&n!="constructor"&&t.push(n);return t}var bH=wH,SH=a9,PH=b9;function OH(e){return e!=null&&PH(e.length)&&!SH(e)}var Ml=OH,kH=lH,CH=bH,AH=Ml;function EH(e){return AH(e)?kH(e):CH(e)}var x1=EH,NH=UD,TH=tL,jH=x1;function RH(e){return NH(e,jH,TH)}var $H=RH,q2=$H,MH=1,qH=Object.prototype,IH=qH.hasOwnProperty;function DH(e,t,n,r,a,o){var i=n&MH,s=q2(e),u=s.length,l=q2(t),p=l.length;if(u!=p&&!i)return!1;for(var c=u;c--;){var m=s[c];if(!(i?m in t:IH.call(t,m)))return!1}var d=o.get(e),g=o.get(t);if(d&&g)return d==t&&g==e;var f=!0;o.set(e,t),o.set(t,e);for(var y=i;++c-1}var qB=MB;function IB(e,t,n){for(var r=-1,a=e==null?0:e.length;++r=ZB){var l=t?null:YB(e);if(l)return QB(l);i=!1,a=XB,u=new WB}else u=t?[]:s;e:for(;++r=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function fF(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function vF(e){return e.value}function hF(e,t){if(E.isValidElement(e))return E.cloneElement(e,t);if(typeof e=="function")return E.createElement(e,t);t.ref;var n=dF(t,oF);return E.createElement(g9,n)}var Z2=1,yi=function(e){function t(){var n;iF(this,t);for(var r=arguments.length,a=new Array(r),o=0;oZ2||Math.abs(a.height-this.lastBoundingBox.height)>Z2)&&(this.lastBoundingBox.width=a.width,this.lastBoundingBox.height=a.height,r&&r(a)):(this.lastBoundingBox.width!==-1||this.lastBoundingBox.height!==-1)&&(this.lastBoundingBox.width=-1,this.lastBoundingBox.height=-1,r&&r(null))}},{key:"getBBoxSnapshot",value:function(){return this.lastBoundingBox.width>=0&&this.lastBoundingBox.height>=0?_r({},this.lastBoundingBox):{width:0,height:0}}},{key:"getDefaultPosition",value:function(r){var a=this.props,o=a.layout,i=a.align,s=a.verticalAlign,u=a.margin,l=a.chartWidth,p=a.chartHeight,c,m;if(!r||(r.left===void 0||r.left===null)&&(r.right===void 0||r.right===null))if(i==="center"&&o==="vertical"){var d=this.getBBoxSnapshot();c={left:((l||0)-d.width)/2}}else c=i==="right"?{right:u&&u.right||0}:{left:u&&u.left||0};if(!r||(r.top===void 0||r.top===null)&&(r.bottom===void 0||r.bottom===null))if(s==="middle"){var g=this.getBBoxSnapshot();m={top:((p||0)-g.height)/2}}else m=s==="bottom"?{bottom:u&&u.bottom||0}:{top:u&&u.top||0};return _r(_r({},c),m)}},{key:"render",value:function(){var r=this,a=this.props,o=a.content,i=a.width,s=a.height,u=a.wrapperStyle,l=a.payloadUniqBy,p=a.payload,c=_r(_r({position:"absolute",width:i||"auto",height:s||"auto"},this.getDefaultPosition(u)),u);return E.createElement("div",{className:"recharts-legend-wrapper",style:c,ref:function(d){r.wrapperNode=d}},hF(o,_r(_r({},this.props),{},{payload:ww(p,l,vF)})))}}],[{key:"getWithHeight",value:function(r,a){var o=_r(_r({},this.defaultProps),r.props),i=o.layout;return i==="vertical"&&V(r.props.height)?{height:r.props.height}:i==="horizontal"?{width:r.props.width||a}:null}}])}(P.PureComponent);w1(yi,"displayName","Legend");w1(yi,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"bottom"});var J2=$l,yF=x9,gF=Vt,eh=J2?J2.isConcatSpreadable:void 0;function _F(e){return gF(e)||yF(e)||!!(eh&&e&&e[eh])}var xF=_F,wF=lw,bF=xF;function Pw(e,t,n,r,a){var o=-1,i=e.length;for(n||(n=bF),a||(a=[]);++o0&&n(s)?t>1?Pw(s,t-1,n,r,a):wF(a,s):r||(a[a.length]=s)}return a}var Ow=Pw;function SF(e){return function(t,n,r){for(var a=-1,o=Object(t),i=r(t),s=i.length;s--;){var u=i[e?s:++a];if(n(o[u],u,o)===!1)break}return t}}var PF=SF,OF=PF,kF=OF(),CF=kF,AF=CF,EF=x1;function NF(e,t){return e&&AF(e,t,EF)}var kw=NF,TF=Ml;function jF(e,t){return function(n,r){if(n==null)return n;if(!TF(n))return e(n,r);for(var a=n.length,o=t?a:-1,i=Object(n);(t?o--:++ot||o&&i&&u&&!s&&!l||r&&i&&u||!n&&u||!a)return 1;if(!r&&!o&&!l&&e=s)return u;var l=n[r];return u*(l=="desc"?-1:1)}}return e.index-t.index}var WF=UF,Bm=l9,VF=c9,KF=Ia,XF=Cw,YF=GF,QF=mw,ZF=WF,JF=Cs,ez=Vt;function tz(e,t,n){t.length?t=Bm(t,function(o){return ez(o)?function(i){return VF(i,o.length===1?o[0]:o)}:o}):t=[JF];var r=-1;t=Bm(t,QF(KF));var a=XF(e,function(o,i,s){var u=Bm(t,function(l){return l(o)});return{criteria:u,index:++r,value:o}});return YF(a,function(o,i){return ZF(o,i,n)})}var nz=tz;function rz(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}var az=rz,oz=az,nh=Math.max;function iz(e,t,n){return t=nh(t===void 0?e.length-1:t,0),function(){for(var r=arguments,a=-1,o=nh(r.length-t,0),i=Array(o);++a0){if(++t>=hz)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}var xz=_z,wz=vz,bz=xz,Sz=bz(wz),Pz=Sz,Oz=Cs,kz=sz,Cz=Pz;function Az(e,t){return Cz(kz(e,t,Oz),e+"")}var Ez=Az,Nz=o9,Tz=Ml,jz=w9,Rz=qa;function $z(e,t,n){if(!Rz(n))return!1;var r=typeof t;return(r=="number"?Tz(n)&&jz(t,n.length):r=="string"&&t in n)?Nz(n[t],e):!1}var b1=$z,Mz=Ow,qz=nz,Iz=Ez,ah=b1,Dz=Iz(function(e,t){if(e==null)return[];var n=t.length;return n>1&&ah(e,t[0],t[1])?t=[]:n>2&&ah(t[0],t[1],t[2])&&(t=[t[0]]),qz(e,Mz(t,1),[])}),Lz=Dz;const O9=Ae(Lz);function Bu(e){"@babel/helpers - typeof";return Bu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Bu(e)}function $3(){return $3=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=t.x),"".concat(zs,"-left"),V(n)&&t&&V(t.x)&&n=t.y),"".concat(zs,"-top"),V(r)&&t&&V(t.y)&&rf?Math.max(p,u[r]):Math.max(c,u[r])}function eU(e){var t=e.translateX,n=e.translateY,r=e.useTranslate3d;return{transform:r?"translate3d(".concat(t,"px, ").concat(n,"px, 0)"):"translate(".concat(t,"px, ").concat(n,"px)")}}function tU(e){var t=e.allowEscapeViewBox,n=e.coordinate,r=e.offsetTopLeft,a=e.position,o=e.reverseDirection,i=e.tooltipBox,s=e.useTranslate3d,u=e.viewBox,l,p,c;return i.height>0&&i.width>0&&n?(p=sh({allowEscapeViewBox:t,coordinate:n,key:"x",offsetTopLeft:r,position:a,reverseDirection:o,tooltipDimension:i.width,viewBox:u,viewBoxDimension:u.width}),c=sh({allowEscapeViewBox:t,coordinate:n,key:"y",offsetTopLeft:r,position:a,reverseDirection:o,tooltipDimension:i.height,viewBox:u,viewBoxDimension:u.height}),l=eU({translateX:p,translateY:c,useTranslate3d:s})):l=Zz,{cssProperties:l,cssClasses:Jz({translateX:p,translateY:c,coordinate:n})}}function Hi(e){"@babel/helpers - typeof";return Hi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Hi(e)}function uh(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function lh(e){for(var t=1;tch||Math.abs(r.height-this.state.lastBoundingBox.height)>ch)&&this.setState({lastBoundingBox:{width:r.width,height:r.height}})}else(this.state.lastBoundingBox.width!==-1||this.state.lastBoundingBox.height!==-1)&&this.setState({lastBoundingBox:{width:-1,height:-1}})}},{key:"componentDidMount",value:function(){document.addEventListener("keydown",this.handleKeyDown),this.updateBBox()}},{key:"componentWillUnmount",value:function(){document.removeEventListener("keydown",this.handleKeyDown)}},{key:"componentDidUpdate",value:function(){var r,a;this.props.active&&this.updateBBox(),this.state.dismissed&&(((r=this.props.coordinate)===null||r===void 0?void 0:r.x)!==this.state.dismissedAtCoordinate.x||((a=this.props.coordinate)===null||a===void 0?void 0:a.y)!==this.state.dismissedAtCoordinate.y)&&(this.state.dismissed=!1)}},{key:"render",value:function(){var r=this,a=this.props,o=a.active,i=a.allowEscapeViewBox,s=a.animationDuration,u=a.animationEasing,l=a.children,p=a.coordinate,c=a.hasPayload,m=a.isAnimationActive,d=a.offset,g=a.position,f=a.reverseDirection,y=a.useTranslate3d,v=a.viewBox,h=a.wrapperStyle,_=tU({allowEscapeViewBox:i,coordinate:p,offsetTopLeft:d,position:g,reverseDirection:f,tooltipBox:this.state.lastBoundingBox,useTranslate3d:y,viewBox:v}),w=_.cssClasses,x=_.cssProperties,S=lh(lh({transition:m&&o?"transform ".concat(s,"ms ").concat(u):void 0},x),{},{pointerEvents:"none",visibility:!this.state.dismissed&&o&&c?"visible":"hidden",position:"absolute",top:0,left:0},h);return E.createElement("div",{tabIndex:-1,className:w,style:S,ref:function(k){r.wrapperNode=k}},l)}}])}(P.PureComponent),pU=function(){return!(typeof window<"u"&&window.document&&window.document.createElement&&window.setTimeout)},Da={isSsr:pU()};function Gi(e){"@babel/helpers - typeof";return Gi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Gi(e)}function ph(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function mh(e){for(var t=1;t0;return E.createElement(cU,{allowEscapeViewBox:i,animationDuration:s,animationEasing:u,isAnimationActive:m,active:o,coordinate:p,hasPayload:S,offset:d,position:y,reverseDirection:v,useTranslate3d:h,viewBox:_,wrapperStyle:w},wU(l,mh(mh({},this.props),{},{payload:x})))}}])}(P.PureComponent);k9(Zn,"displayName","Tooltip");k9(Zn,"defaultProps",{accessibilityLayer:!1,allowEscapeViewBox:{x:!1,y:!1},animationDuration:400,animationEasing:"ease",contentStyle:{},coordinate:{x:0,y:0},cursor:!0,cursorStyle:{},filterNull:!0,isAnimationActive:!Da.isSsr,itemStyle:{},labelStyle:{},offset:10,reverseDirection:{x:!1,y:!1},separator:" : ",trigger:"hover",useTranslate3d:!1,viewBox:{x:0,y:0,height:0,width:0},wrapperStyle:{}});var bU=yr,SU=function(){return bU.Date.now()},PU=SU,OU=/\s/;function kU(e){for(var t=e.length;t--&&OU.test(e.charAt(t)););return t}var CU=kU,AU=CU,EU=/^\s+/;function NU(e){return e&&e.slice(0,AU(e)+1).replace(EU,"")}var TU=NU,jU=TU,dh=qa,RU=_s,fh=NaN,$U=/^[-+]0x[0-9a-f]+$/i,MU=/^0b[01]+$/i,qU=/^0o[0-7]+$/i,IU=parseInt;function DU(e){if(typeof e=="number")return e;if(RU(e))return fh;if(dh(e)){var t=typeof e.valueOf=="function"?e.valueOf():e;e=dh(t)?t+"":t}if(typeof e!="string")return e===0?e:+e;e=jU(e);var n=MU.test(e);return n||qU.test(e)?IU(e.slice(2),n?2:8):$U.test(e)?fh:+e}var Rw=DU,LU=qa,zm=PU,vh=Rw,HU="Expected a function",GU=Math.max,BU=Math.min;function FU(e,t,n){var r,a,o,i,s,u,l=0,p=!1,c=!1,m=!0;if(typeof e!="function")throw new TypeError(HU);t=vh(t)||0,LU(n)&&(p=!!n.leading,c="maxWait"in n,o=c?GU(vh(n.maxWait)||0,t):o,m="trailing"in n?!!n.trailing:m);function d(S){var O=r,k=a;return r=a=void 0,l=S,i=e.apply(k,O),i}function g(S){return l=S,s=setTimeout(v,t),p?d(S):i}function f(S){var O=S-u,k=S-l,C=t-O;return c?BU(C,o-k):C}function y(S){var O=S-u,k=S-l;return u===void 0||O>=t||O<0||c&&k>=o}function v(){var S=zm();if(y(S))return h(S);s=setTimeout(v,f(S))}function h(S){return s=void 0,m&&r?d(S):(r=a=void 0,i)}function _(){s!==void 0&&clearTimeout(s),l=0,r=u=a=s=void 0}function w(){return s===void 0?i:h(zm())}function x(){var S=zm(),O=y(S);if(r=arguments,a=this,u=S,O){if(s===void 0)return g(u);if(c)return clearTimeout(s),s=setTimeout(v,t),d(u)}return s===void 0&&(s=setTimeout(v,t)),i}return x.cancel=_,x.flush=w,x}var zU=FU,UU=zU,WU=qa,VU="Expected a function";function KU(e,t,n){var r=!0,a=!0;if(typeof e!="function")throw new TypeError(VU);return WU(n)&&(r="leading"in n?!!n.leading:r,a="trailing"in n?!!n.trailing:a),UU(e,t,{leading:r,maxWait:t,trailing:a})}var XU=KU;const $w=Ae(XU);function zu(e){"@babel/helpers - typeof";return zu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},zu(e)}function hh(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function vc(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&($=$w($,f,{trailing:!0,leading:!1}));var R=new ResizeObserver($),q=x.current.getBoundingClientRect(),M=q.width,D=q.height;return T(M,D),R.observe(x.current),function(){R.disconnect()}},[T,f]);var A=P.useMemo(function(){var $=C.containerWidth,R=C.containerHeight;if($<0||R<0)return null;Tr(eo(i)||eo(u),`The width(%s) and height(%s) are both fixed numbers, - maybe you don't need to use a ResponsiveContainer.`,i,u),Tr(!n||n>0,"The aspect(%s) must be greater than zero.",n);var q=eo(i)?$:i,M=eo(u)?R:u;n&&n>0&&(q?M=q/n:M&&(q=M*n),m&&M>m&&(M=m)),Tr(q>0||M>0,`The width(%s) and height(%s) of chart should be greater than 0, + */var z8;function OI(){if(z8)return Ue;z8=1;var e=Symbol.for("react.element"),t=Symbol.for("react.portal"),n=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),a=Symbol.for("react.profiler"),i=Symbol.for("react.provider"),u=Symbol.for("react.context"),l=Symbol.for("react.server_context"),c=Symbol.for("react.forward_ref"),m=Symbol.for("react.suspense"),f=Symbol.for("react.suspense_list"),d=Symbol.for("react.memo"),v=Symbol.for("react.lazy"),_=Symbol.for("react.offscreen"),w;w=Symbol.for("react.module.reference");function g(y){if(typeof y=="object"&&y!==null){var b=y.$$typeof;switch(b){case e:switch(y=y.type,y){case n:case a:case r:case m:case f:return y;default:switch(y=y&&y.$$typeof,y){case l:case u:case c:case v:case d:case i:return y;default:return b}}case t:return b}}}return Ue.ContextConsumer=u,Ue.ContextProvider=i,Ue.Element=e,Ue.ForwardRef=c,Ue.Fragment=n,Ue.Lazy=v,Ue.Memo=d,Ue.Portal=t,Ue.Profiler=a,Ue.StrictMode=r,Ue.Suspense=m,Ue.SuspenseList=f,Ue.isAsyncMode=function(){return!1},Ue.isConcurrentMode=function(){return!1},Ue.isContextConsumer=function(y){return g(y)===u},Ue.isContextProvider=function(y){return g(y)===i},Ue.isElement=function(y){return typeof y=="object"&&y!==null&&y.$$typeof===e},Ue.isForwardRef=function(y){return g(y)===c},Ue.isFragment=function(y){return g(y)===n},Ue.isLazy=function(y){return g(y)===v},Ue.isMemo=function(y){return g(y)===d},Ue.isPortal=function(y){return g(y)===t},Ue.isProfiler=function(y){return g(y)===a},Ue.isStrictMode=function(y){return g(y)===r},Ue.isSuspense=function(y){return g(y)===m},Ue.isSuspenseList=function(y){return g(y)===f},Ue.isValidElementType=function(y){return typeof y=="string"||typeof y=="function"||y===n||y===a||y===r||y===m||y===f||y===_||typeof y=="object"&&y!==null&&(y.$$typeof===v||y.$$typeof===d||y.$$typeof===i||y.$$typeof===u||y.$$typeof===c||y.$$typeof===w||y.getModuleId!==void 0)},Ue.typeOf=g,Ue}var U8;function kI(){return U8||(U8=1,K3.exports=OI()),K3.exports}var CI=kI(),X3,W8;function TO(){if(W8)return X3;W8=1;var e=ha(),t=ya(),n="[object Number]";function r(a){return typeof a=="number"||t(a)&&e(a)==n}return X3=r,X3}var Y3,V8;function AI(){if(V8)return Y3;V8=1;var e=TO();function t(n){return e(n)&&n!=+n}return Y3=t,Y3}var EI=AI();const Fs=tt(EI);var RI=TO();const TI=tt(RI);var mr=function(t){return t===0?0:t>0?1:-1},Ro=function(t){return Vo(t)&&t.indexOf("%")===t.length-1},ce=function(t){return TI(t)&&!Fs(t)},NI=function(t){return Re(t)},Rt=function(t){return ce(t)||Vo(t)},qI=0,ni=function(t){var n=++qI;return"".concat(t||"").concat(n)},Ko=function(t,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:0,a=arguments.length>3&&arguments[3]!==void 0?arguments[3]:!1;if(!ce(t)&&!Vo(t))return r;var i;if(Ro(t)){var u=t.indexOf("%");i=n*parseFloat(t.slice(0,u))/100}else i=+t;return Fs(i)&&(i=r),a&&i>n&&(i=n),i},za=function(t){if(!t)return null;var n=Object.keys(t);return n&&n.length?t[n[0]]:null},jI=function(t){if(!Array.isArray(t))return!1;for(var n=t.length,r={},a=0;a=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function FI(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function l5(e){"@babel/helpers - typeof";return l5=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},l5(e)}var Y8={click:"onClick",mousedown:"onMouseDown",mouseup:"onMouseUp",mouseover:"onMouseOver",mousemove:"onMouseMove",mouseout:"onMouseOut",mouseenter:"onMouseEnter",mouseleave:"onMouseLeave",touchcancel:"onTouchCancel",touchend:"onTouchEnd",touchmove:"onTouchMove",touchstart:"onTouchStart",contextmenu:"onContextMenu",dblclick:"onDoubleClick"},sa=function(t){return typeof t=="string"?t:t?t.displayName||t.name||"Component":""},Q8=null,Z3=null,i2=function e(t){if(t===Q8&&Array.isArray(Z3))return Z3;var n=[];return R.Children.forEach(t,function(r){Re(r)||(CI.isFragment(r)?n=n.concat(e(r.props.children)):n.push(r))}),Z3=n,Q8=t,n};function Sn(e,t){var n=[],r=[];return Array.isArray(t)?r=t.map(function(a){return sa(a)}):r=[sa(t)],i2(e).forEach(function(a){var i=Xn(a,"type.displayName")||Xn(a,"type.name");r.indexOf(i)!==-1&&n.push(a)}),n}function Tn(e,t){var n=Sn(e,t);return n&&n[0]}var Z8=function(t){if(!t||!t.props)return!1;var n=t.props,r=n.width,a=n.height;return!(!ce(r)||r<=0||!ce(a)||a<=0)},BI=["a","altGlyph","altGlyphDef","altGlyphItem","animate","animateColor","animateMotion","animateTransform","circle","clipPath","color-profile","cursor","defs","desc","ellipse","feBlend","feColormatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","font","font-face","font-face-format","font-face-name","font-face-url","foreignObject","g","glyph","glyphRef","hkern","image","line","lineGradient","marker","mask","metadata","missing-glyph","mpath","path","pattern","polygon","polyline","radialGradient","rect","script","set","stop","style","svg","switch","symbol","text","textPath","title","tref","tspan","use","view","vkern"],zI=function(t){return t&&t.type&&Vo(t.type)&&BI.indexOf(t.type)>=0},NO=function(t){return t&&l5(t)==="object"&&"clipDot"in t},UI=function(t,n,r,a){var i,u=(i=Q3==null?void 0:Q3[a])!==null&&i!==void 0?i:[];return n.startsWith("data-")||!Ne(t)&&(a&&u.includes(n)||$I.includes(n))||r&&o2.includes(n)},Te=function(t,n,r){if(!t||typeof t=="function"||typeof t=="boolean")return null;var a=t;if(R.isValidElement(t)&&(a=t.props),!Gs(a))return null;var i={};return Object.keys(a).forEach(function(u){var l;UI((l=a)===null||l===void 0?void 0:l[u],u,n,r)&&(i[u]=a[u])}),i},c5=function e(t,n){if(t===n)return!0;var r=R.Children.count(t);if(r!==R.Children.count(n))return!1;if(r===0)return!0;if(r===1)return J8(Array.isArray(t)?t[0]:t,Array.isArray(n)?n[0]:n);for(var a=0;a=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function YI(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function m5(e){var t=e.children,n=e.width,r=e.height,a=e.viewBox,i=e.className,u=e.style,l=e.title,c=e.desc,m=XI(e,KI),f=a||{width:n,height:r,x:0,y:0},d=Ie("recharts-surface",i);return L.createElement("svg",p5({},Te(m,!0,"svg"),{className:d,width:n,height:r,style:u,viewBox:"".concat(f.x," ").concat(f.y," ").concat(f.width," ").concat(f.height)}),L.createElement("title",null,l),L.createElement("desc",null,c),t)}var QI=["children","className"];function d5(){return d5=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function JI(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var Be=L.forwardRef(function(e,t){var n=e.children,r=e.className,a=ZI(e,QI),i=Ie("recharts-layer",r);return L.createElement("g",d5({className:i},Te(a,!0),{ref:t}),n)}),ua=function(t,n){for(var r=arguments.length,a=new Array(r>2?r-2:0),i=2;ii?0:i+n),r=r>i?i:r,r<0&&(r+=i),i=n>r?0:r-n>>>0,n>>>=0;for(var u=Array(i);++a=i?n:e(n,r,a)}return ef=t,ef}var tf,r_;function qO(){if(r_)return tf;r_=1;var e="\\ud800-\\udfff",t="\\u0300-\\u036f",n="\\ufe20-\\ufe2f",r="\\u20d0-\\u20ff",a=t+n+r,i="\\ufe0e\\ufe0f",u="\\u200d",l=RegExp("["+u+e+a+i+"]");function c(m){return l.test(m)}return tf=c,tf}var nf,a_;function nD(){if(a_)return nf;a_=1;function e(t){return t.split("")}return nf=e,nf}var rf,o_;function rD(){if(o_)return rf;o_=1;var e="\\ud800-\\udfff",t="\\u0300-\\u036f",n="\\ufe20-\\ufe2f",r="\\u20d0-\\u20ff",a=t+n+r,i="\\ufe0e\\ufe0f",u="["+e+"]",l="["+a+"]",c="\\ud83c[\\udffb-\\udfff]",m="(?:"+l+"|"+c+")",f="[^"+e+"]",d="(?:\\ud83c[\\udde6-\\uddff]){2}",v="[\\ud800-\\udbff][\\udc00-\\udfff]",_="\\u200d",w=m+"?",g="["+i+"]?",y="(?:"+_+"(?:"+[f,d,v].join("|")+")"+g+w+")*",b=g+w+y,O="(?:"+[f+l+"?",l,d,v,u].join("|")+")",C=RegExp(c+"(?="+c+")|"+O+b,"g");function k(P){return P.match(C)||[]}return rf=k,rf}var af,i_;function aD(){if(i_)return af;i_=1;var e=nD(),t=qO(),n=rD();function r(a){return t(a)?n(a):e(a)}return af=r,af}var of,s_;function oD(){if(s_)return of;s_=1;var e=tD(),t=qO(),n=aD(),r=AO();function a(i){return function(u){u=r(u);var l=t(u)?n(u):void 0,c=l?l[0]:u.charAt(0),m=l?e(l,1).join(""):u.slice(1);return c[i]()+m}}return of=a,of}var sf,u_;function iD(){if(u_)return sf;u_=1;var e=oD(),t=e("toUpperCase");return sf=t,sf}var sD=iD();const p0=tt(sD);function at(e){return function(){return e}}const jO=Math.cos,Xp=Math.sin,_r=Math.sqrt,Yp=Math.PI,m0=2*Yp,f5=Math.PI,v5=2*f5,Ao=1e-6,uD=v5-Ao;function MO(e){this._+=e[0];for(let t=1,n=e.length;t=0))throw new Error(`invalid digits: ${e}`);if(t>15)return MO;const n=10**t;return function(r){this._+=r[0];for(let a=1,i=r.length;aAo)if(!(Math.abs(d*c-m*f)>Ao)||!i)this._append`L${this._x1=t},${this._y1=n}`;else{let _=r-u,w=a-l,g=c*c+m*m,y=_*_+w*w,b=Math.sqrt(g),O=Math.sqrt(v),C=i*Math.tan((f5-Math.acos((g+v-y)/(2*b*O)))/2),k=C/O,P=C/b;Math.abs(k-1)>Ao&&this._append`L${t+k*f},${n+k*d}`,this._append`A${i},${i},0,0,${+(d*_>f*w)},${this._x1=t+P*c},${this._y1=n+P*m}`}}arc(t,n,r,a,i,u){if(t=+t,n=+n,r=+r,u=!!u,r<0)throw new Error(`negative radius: ${r}`);let l=r*Math.cos(a),c=r*Math.sin(a),m=t+l,f=n+c,d=1^u,v=u?a-i:i-a;this._x1===null?this._append`M${m},${f}`:(Math.abs(this._x1-m)>Ao||Math.abs(this._y1-f)>Ao)&&this._append`L${m},${f}`,r&&(v<0&&(v=v%v5+v5),v>uD?this._append`A${r},${r},0,1,${d},${t-l},${n-c}A${r},${r},0,1,${d},${this._x1=m},${this._y1=f}`:v>Ao&&this._append`A${r},${r},0,${+(v>=f5)},${d},${this._x1=t+r*Math.cos(i)},${this._y1=n+r*Math.sin(i)}`)}rect(t,n,r,a){this._append`M${this._x0=this._x1=+t},${this._y0=this._y1=+n}h${r=+r}v${+a}h${-r}Z`}toString(){return this._}}function s2(e){let t=3;return e.digits=function(n){if(!arguments.length)return t;if(n==null)t=null;else{const r=Math.floor(n);if(!(r>=0))throw new RangeError(`invalid digits: ${n}`);t=r}return e},()=>new cD(t)}function u2(e){return typeof e=="object"&&"length"in e?e:Array.from(e)}function IO(e){this._context=e}IO.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:this._context.lineTo(e,t);break}}};function d0(e){return new IO(e)}function DO(e){return e[0]}function $O(e){return e[1]}function LO(e,t){var n=at(!0),r=null,a=d0,i=null,u=s2(l);e=typeof e=="function"?e:e===void 0?DO:at(e),t=typeof t=="function"?t:t===void 0?$O:at(t);function l(c){var m,f=(c=u2(c)).length,d,v=!1,_;for(r==null&&(i=a(_=u())),m=0;m<=f;++m)!(m=_;--w)l.point(C[w],k[w]);l.lineEnd(),l.areaEnd()}b&&(C[v]=+e(y,v,d),k[v]=+t(y,v,d),l.point(r?+r(y,v,d):C[v],n?+n(y,v,d):k[v]))}if(O)return l=null,O+""||null}function f(){return LO().defined(a).curve(u).context(i)}return m.x=function(d){return arguments.length?(e=typeof d=="function"?d:at(+d),r=null,m):e},m.x0=function(d){return arguments.length?(e=typeof d=="function"?d:at(+d),m):e},m.x1=function(d){return arguments.length?(r=d==null?null:typeof d=="function"?d:at(+d),m):r},m.y=function(d){return arguments.length?(t=typeof d=="function"?d:at(+d),n=null,m):t},m.y0=function(d){return arguments.length?(t=typeof d=="function"?d:at(+d),m):t},m.y1=function(d){return arguments.length?(n=d==null?null:typeof d=="function"?d:at(+d),m):n},m.lineX0=m.lineY0=function(){return f().x(e).y(t)},m.lineY1=function(){return f().x(e).y(n)},m.lineX1=function(){return f().x(r).y(t)},m.defined=function(d){return arguments.length?(a=typeof d=="function"?d:at(!!d),m):a},m.curve=function(d){return arguments.length?(u=d,i!=null&&(l=u(i)),m):u},m.context=function(d){return arguments.length?(d==null?i=l=null:l=u(i=d),m):i},m}class HO{constructor(t,n){this._context=t,this._x=n}areaStart(){this._line=0}areaEnd(){this._line=NaN}lineStart(){this._point=0}lineEnd(){(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line}point(t,n){switch(t=+t,n=+n,this._point){case 0:{this._point=1,this._line?this._context.lineTo(t,n):this._context.moveTo(t,n);break}case 1:this._point=2;default:{this._x?this._context.bezierCurveTo(this._x0=(this._x0+t)/2,this._y0,this._x0,n,t,n):this._context.bezierCurveTo(this._x0,this._y0=(this._y0+n)/2,t,this._y0,t,n);break}}this._x0=t,this._y0=n}}function pD(e){return new HO(e,!0)}function mD(e){return new HO(e,!1)}const l2={draw(e,t){const n=_r(t/Yp);e.moveTo(n,0),e.arc(0,0,n,0,m0)}},dD={draw(e,t){const n=_r(t/5)/2;e.moveTo(-3*n,-n),e.lineTo(-n,-n),e.lineTo(-n,-3*n),e.lineTo(n,-3*n),e.lineTo(n,-n),e.lineTo(3*n,-n),e.lineTo(3*n,n),e.lineTo(n,n),e.lineTo(n,3*n),e.lineTo(-n,3*n),e.lineTo(-n,n),e.lineTo(-3*n,n),e.closePath()}},GO=_r(1/3),fD=GO*2,vD={draw(e,t){const n=_r(t/fD),r=n*GO;e.moveTo(0,-n),e.lineTo(r,0),e.lineTo(0,n),e.lineTo(-r,0),e.closePath()}},hD={draw(e,t){const n=_r(t),r=-n/2;e.rect(r,r,n,n)}},yD=.8908130915292852,FO=Xp(Yp/10)/Xp(7*Yp/10),_D=Xp(m0/10)*FO,gD=-jO(m0/10)*FO,xD={draw(e,t){const n=_r(t*yD),r=_D*n,a=gD*n;e.moveTo(0,-n),e.lineTo(r,a);for(let i=1;i<5;++i){const u=m0*i/5,l=jO(u),c=Xp(u);e.lineTo(c*n,-l*n),e.lineTo(l*r-c*a,c*r+l*a)}e.closePath()}},uf=_r(3),wD={draw(e,t){const n=-_r(t/(uf*3));e.moveTo(0,n*2),e.lineTo(-uf*n,-n),e.lineTo(uf*n,-n),e.closePath()}},Bn=-.5,zn=_r(3)/2,h5=1/_r(12),bD=(h5/2+1)*3,SD={draw(e,t){const n=_r(t/bD),r=n/2,a=n*h5,i=r,u=n*h5+n,l=-i,c=u;e.moveTo(r,a),e.lineTo(i,u),e.lineTo(l,c),e.lineTo(Bn*r-zn*a,zn*r+Bn*a),e.lineTo(Bn*i-zn*u,zn*i+Bn*u),e.lineTo(Bn*l-zn*c,zn*l+Bn*c),e.lineTo(Bn*r+zn*a,Bn*a-zn*r),e.lineTo(Bn*i+zn*u,Bn*u-zn*i),e.lineTo(Bn*l+zn*c,Bn*c-zn*l),e.closePath()}};function PD(e,t){let n=null,r=s2(a);e=typeof e=="function"?e:at(e||l2),t=typeof t=="function"?t:at(t===void 0?64:+t);function a(){let i;if(n||(n=i=r()),e.apply(this,arguments).draw(n,+t.apply(this,arguments)),i)return n=null,i+""||null}return a.type=function(i){return arguments.length?(e=typeof i=="function"?i:at(i),a):e},a.size=function(i){return arguments.length?(t=typeof i=="function"?i:at(+i),a):t},a.context=function(i){return arguments.length?(n=i??null,a):n},a}function Qp(){}function Zp(e,t,n){e._context.bezierCurveTo((2*e._x0+e._x1)/3,(2*e._y0+e._y1)/3,(e._x0+2*e._x1)/3,(e._y0+2*e._y1)/3,(e._x0+4*e._x1+t)/6,(e._y0+4*e._y1+n)/6)}function BO(e){this._context=e}BO.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){switch(this._point){case 3:Zp(this,this._x1,this._y1);case 2:this._context.lineTo(this._x1,this._y1);break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,this._context.lineTo((5*this._x0+this._x1)/6,(5*this._y0+this._y1)/6);default:Zp(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function OD(e){return new BO(e)}function zO(e){this._context=e}zO.prototype={areaStart:Qp,areaEnd:Qp,lineStart:function(){this._x0=this._x1=this._x2=this._x3=this._x4=this._y0=this._y1=this._y2=this._y3=this._y4=NaN,this._point=0},lineEnd:function(){switch(this._point){case 1:{this._context.moveTo(this._x2,this._y2),this._context.closePath();break}case 2:{this._context.moveTo((this._x2+2*this._x3)/3,(this._y2+2*this._y3)/3),this._context.lineTo((this._x3+2*this._x2)/3,(this._y3+2*this._y2)/3),this._context.closePath();break}case 3:{this.point(this._x2,this._y2),this.point(this._x3,this._y3),this.point(this._x4,this._y4);break}}},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._x2=e,this._y2=t;break;case 1:this._point=2,this._x3=e,this._y3=t;break;case 2:this._point=3,this._x4=e,this._y4=t,this._context.moveTo((this._x0+4*this._x1+e)/6,(this._y0+4*this._y1+t)/6);break;default:Zp(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function kD(e){return new zO(e)}function UO(e){this._context=e}UO.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=NaN,this._point=0},lineEnd:function(){(this._line||this._line!==0&&this._point===3)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1;break;case 1:this._point=2;break;case 2:this._point=3;var n=(this._x0+4*this._x1+e)/6,r=(this._y0+4*this._y1+t)/6;this._line?this._context.lineTo(n,r):this._context.moveTo(n,r);break;case 3:this._point=4;default:Zp(this,e,t);break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t}};function CD(e){return new UO(e)}function WO(e){this._context=e}WO.prototype={areaStart:Qp,areaEnd:Qp,lineStart:function(){this._point=0},lineEnd:function(){this._point&&this._context.closePath()},point:function(e,t){e=+e,t=+t,this._point?this._context.lineTo(e,t):(this._point=1,this._context.moveTo(e,t))}};function AD(e){return new WO(e)}function l_(e){return e<0?-1:1}function c_(e,t,n){var r=e._x1-e._x0,a=t-e._x1,i=(e._y1-e._y0)/(r||a<0&&-0),u=(n-e._y1)/(a||r<0&&-0),l=(i*a+u*r)/(r+a);return(l_(i)+l_(u))*Math.min(Math.abs(i),Math.abs(u),.5*Math.abs(l))||0}function p_(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function lf(e,t,n){var r=e._x0,a=e._y0,i=e._x1,u=e._y1,l=(i-r)/3;e._context.bezierCurveTo(r+l,a+l*t,i-l,u-l*n,i,u)}function Jp(e){this._context=e}Jp.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN,this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:lf(this,this._t0,p_(this,this._t0));break}(this._line||this._line!==0&&this._point===1)&&this._context.closePath(),this._line=1-this._line},point:function(e,t){var n=NaN;if(e=+e,t=+t,!(e===this._x1&&t===this._y1)){switch(this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3,lf(this,p_(this,n=c_(this,e,t)),n);break;default:lf(this,this._t0,n=c_(this,e,t));break}this._x0=this._x1,this._x1=e,this._y0=this._y1,this._y1=t,this._t0=n}}};function VO(e){this._context=new KO(e)}(VO.prototype=Object.create(Jp.prototype)).point=function(e,t){Jp.prototype.point.call(this,t,e)};function KO(e){this._context=e}KO.prototype={moveTo:function(e,t){this._context.moveTo(t,e)},closePath:function(){this._context.closePath()},lineTo:function(e,t){this._context.lineTo(t,e)},bezierCurveTo:function(e,t,n,r,a,i){this._context.bezierCurveTo(t,e,r,n,i,a)}};function ED(e){return new Jp(e)}function RD(e){return new VO(e)}function XO(e){this._context=e}XO.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x=[],this._y=[]},lineEnd:function(){var e=this._x,t=this._y,n=e.length;if(n)if(this._line?this._context.lineTo(e[0],t[0]):this._context.moveTo(e[0],t[0]),n===2)this._context.lineTo(e[1],t[1]);else for(var r=m_(e),a=m_(t),i=0,u=1;u=0;--t)a[t]=(u[t]-a[t+1])/i[t];for(i[n-1]=(e[n]+a[n-1])/2,t=0;t=0&&(this._t=1-this._t,this._line=1-this._line)},point:function(e,t){switch(e=+e,t=+t,this._point){case 0:this._point=1,this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;default:{if(this._t<=0)this._context.lineTo(this._x,t),this._context.lineTo(e,t);else{var n=this._x*(1-this._t)+e*this._t;this._context.lineTo(n,this._y),this._context.lineTo(n,t)}break}}this._x=e,this._y=t}};function ND(e){return new f0(e,.5)}function qD(e){return new f0(e,0)}function jD(e){return new f0(e,1)}function ss(e,t){if((u=e.length)>1)for(var n=1,r,a,i=e[t[0]],u,l=i.length;n=0;)n[t]=t;return n}function MD(e,t){return e[t]}function ID(e){const t=[];return t.key=e,t}function DD(){var e=at([]),t=y5,n=ss,r=MD;function a(i){var u=Array.from(e.apply(this,arguments),ID),l,c=u.length,m=-1,f;for(const d of i)for(l=0,++m;l0){for(var n,r,a=0,i=e[0].length,u;a0){for(var n=0,r=e[t[0]],a,i=r.length;n0)||!((i=(a=e[t[0]]).length)>0))){for(var n=0,r=1,a,i,u;r=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function WD(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var YO={symbolCircle:l2,symbolCross:dD,symbolDiamond:vD,symbolSquare:hD,symbolStar:xD,symbolTriangle:wD,symbolWye:SD},VD=Math.PI/180,KD=function(t){var n="symbol".concat(p0(t));return YO[n]||l2},XD=function(t,n,r){if(n==="area")return t;switch(r){case"cross":return 5*t*t/9;case"diamond":return .5*t*t/Math.sqrt(3);case"square":return t*t;case"star":{var a=18*VD;return 1.25*t*t*(Math.tan(a)-Math.tan(a*2)*Math.pow(Math.tan(a),2))}case"triangle":return Math.sqrt(3)*t*t/4;case"wye":return(21-10*Math.sqrt(3))*t*t/8;default:return Math.PI*t*t/4}},YD=function(t,n){YO["symbol".concat(p0(t))]=n},v0=function(t){var n=t.type,r=n===void 0?"circle":n,a=t.size,i=a===void 0?64:a,u=t.sizeType,l=u===void 0?"area":u,c=UD(t,GD),m=f_(f_({},c),{},{type:r,size:i,sizeType:l}),f=function(){var y=KD(r),b=PD().type(y).size(XD(i,l,r));return b()},d=m.className,v=m.cx,_=m.cy,w=Te(m,!0);return v===+v&&_===+_&&i===+i?L.createElement("path",_5({},w,{className:Ie("recharts-symbols",d),transform:"translate(".concat(v,", ").concat(_,")"),d:f()})):null};v0.registerSymbol=YD;function us(e){"@babel/helpers - typeof";return us=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},us(e)}function g5(){return g5=Object.assign?Object.assign.bind():function(e){for(var t=1;t`);var O=_.inactive?m:_.color;return L.createElement("li",g5({className:y,style:d,key:"legend-item-".concat(w)},ul(r.props,_,w)),L.createElement(m5,{width:u,height:u,viewBox:f,style:v},r.renderIcon(_)),L.createElement("span",{className:"recharts-legend-item-text",style:{color:O}},g?g(b,_,w):b))})}},{key:"render",value:function(){var r=this.props,a=r.payload,i=r.layout,u=r.align;if(!a||!a.length)return null;var l={padding:0,margin:0,textAlign:i==="horizontal"?u:"left"};return L.createElement("ul",{className:"recharts-default-legend",style:l},this.renderItems())}}])})(R.PureComponent);cl(c2,"displayName","Legend");cl(c2,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"middle",inactiveColor:"#ccc"});var cf,h_;function i$(){if(h_)return cf;h_=1;var e=u0();function t(){this.__data__=new e,this.size=0}return cf=t,cf}var pf,y_;function s$(){if(y_)return pf;y_=1;function e(t){var n=this.__data__,r=n.delete(t);return this.size=n.size,r}return pf=e,pf}var mf,__;function u$(){if(__)return mf;__=1;function e(t){return this.__data__.get(t)}return mf=e,mf}var df,g_;function l$(){if(g_)return df;g_=1;function e(t){return this.__data__.has(t)}return df=e,df}var ff,x_;function c$(){if(x_)return ff;x_=1;var e=u0(),t=t2(),n=n2(),r=200;function a(i,u){var l=this.__data__;if(l instanceof e){var c=l.__data__;if(!t||c.length_))return!1;var g=d.get(u),y=d.get(l);if(g&&y)return g==l&&y==u;var b=-1,O=!0,C=c&a?new e:void 0;for(d.set(u,l),d.set(l,u);++b<_;){var k=u[b],P=l[b];if(m)var A=v?m(P,k,b,l,u,d):m(k,P,b,u,l,d);if(A!==void 0){if(A)continue;O=!1;break}if(C){if(!t(l,function(T,q){if(!n(C,q)&&(k===T||f(k,T,c,m,d)))return C.push(q)})){O=!1;break}}else if(!(k===P||f(k,P,c,m,d))){O=!1;break}}return d.delete(u),d.delete(l),O}return wf=i,wf}var bf,A_;function d$(){if(A_)return bf;A_=1;var e=Fr(),t=e.Uint8Array;return bf=t,bf}var Sf,E_;function f$(){if(E_)return Sf;E_=1;function e(t){var n=-1,r=Array(t.size);return t.forEach(function(a,i){r[++n]=[i,a]}),r}return Sf=e,Sf}var Pf,R_;function p2(){if(R_)return Pf;R_=1;function e(t){var n=-1,r=Array(t.size);return t.forEach(function(a){r[++n]=a}),r}return Pf=e,Pf}var Of,T_;function v$(){if(T_)return Of;T_=1;var e=Zl(),t=d$(),n=e2(),r=rk(),a=f$(),i=p2(),u=1,l=2,c="[object Boolean]",m="[object Date]",f="[object Error]",d="[object Map]",v="[object Number]",_="[object RegExp]",w="[object Set]",g="[object String]",y="[object Symbol]",b="[object ArrayBuffer]",O="[object DataView]",C=e?e.prototype:void 0,k=C?C.valueOf:void 0;function P(A,T,q,j,B,$,M){switch(q){case O:if(A.byteLength!=T.byteLength||A.byteOffset!=T.byteOffset)return!1;A=A.buffer,T=T.buffer;case b:return!(A.byteLength!=T.byteLength||!$(new t(A),new t(T)));case c:case m:case v:return n(+A,+T);case f:return A.name==T.name&&A.message==T.message;case _:case g:return A==T+"";case d:var H=a;case w:var F=j&u;if(H||(H=i),A.size!=T.size&&!F)return!1;var V=M.get(A);if(V)return V==T;j|=l,M.set(A,T);var K=r(H(A),H(T),j,B,$,M);return M.delete(A),K;case y:if(k)return k.call(A)==k.call(T)}return!1}return Of=P,Of}var kf,N_;function ak(){if(N_)return kf;N_=1;function e(t,n){for(var r=-1,a=n.length,i=t.length;++r-1&&r%1==0&&r-1&&n%1==0&&n<=e}return If=t,If}var Df,z_;function S$(){if(z_)return Df;z_=1;var e=ha(),t=f2(),n=ya(),r="[object Arguments]",a="[object Array]",i="[object Boolean]",u="[object Date]",l="[object Error]",c="[object Function]",m="[object Map]",f="[object Number]",d="[object Object]",v="[object RegExp]",_="[object Set]",w="[object String]",g="[object WeakMap]",y="[object ArrayBuffer]",b="[object DataView]",O="[object Float32Array]",C="[object Float64Array]",k="[object Int8Array]",P="[object Int16Array]",A="[object Int32Array]",T="[object Uint8Array]",q="[object Uint8ClampedArray]",j="[object Uint16Array]",B="[object Uint32Array]",$={};$[O]=$[C]=$[k]=$[P]=$[A]=$[T]=$[q]=$[j]=$[B]=!0,$[r]=$[a]=$[y]=$[i]=$[b]=$[u]=$[l]=$[c]=$[m]=$[f]=$[d]=$[v]=$[_]=$[w]=$[g]=!1;function M(H){return n(H)&&t(H.length)&&!!$[e(H)]}return Df=M,Df}var $f,U_;function ik(){if(U_)return $f;U_=1;function e(t){return function(n){return t(n)}}return $f=e,$f}var Xu={exports:{}};Xu.exports;var W_;function P$(){return W_||(W_=1,(function(e,t){var n=OO(),r=t&&!t.nodeType&&t,a=r&&!0&&e&&!e.nodeType&&e,i=a&&a.exports===r,u=i&&n.process,l=(function(){try{var c=a&&a.require&&a.require("util").types;return c||u&&u.binding&&u.binding("util")}catch{}})();e.exports=l})(Xu,Xu.exports)),Xu.exports}var Lf,V_;function sk(){if(V_)return Lf;V_=1;var e=S$(),t=ik(),n=P$(),r=n&&n.isTypedArray,a=r?t(r):e;return Lf=a,Lf}var Hf,K_;function O$(){if(K_)return Hf;K_=1;var e=x$(),t=m2(),n=Pn(),r=ok(),a=d2(),i=sk(),u=Object.prototype,l=u.hasOwnProperty;function c(m,f){var d=n(m),v=!d&&t(m),_=!d&&!v&&r(m),w=!d&&!v&&!_&&i(m),g=d||v||_||w,y=g?e(m.length,String):[],b=y.length;for(var O in m)(f||l.call(m,O))&&!(g&&(O=="length"||_&&(O=="offset"||O=="parent")||w&&(O=="buffer"||O=="byteLength"||O=="byteOffset")||a(O,b)))&&y.push(O);return y}return Hf=c,Hf}var Gf,X_;function k$(){if(X_)return Gf;X_=1;var e=Object.prototype;function t(n){var r=n&&n.constructor,a=typeof r=="function"&&r.prototype||e;return n===a}return Gf=t,Gf}var Ff,Y_;function uk(){if(Y_)return Ff;Y_=1;function e(t,n){return function(r){return t(n(r))}}return Ff=e,Ff}var Bf,Q_;function C$(){if(Q_)return Bf;Q_=1;var e=uk(),t=e(Object.keys,Object);return Bf=t,Bf}var zf,Z_;function A$(){if(Z_)return zf;Z_=1;var e=k$(),t=C$(),n=Object.prototype,r=n.hasOwnProperty;function a(i){if(!e(i))return t(i);var u=[];for(var l in Object(i))r.call(i,l)&&l!="constructor"&&u.push(l);return u}return zf=a,zf}var Uf,J_;function Jl(){if(J_)return Uf;J_=1;var e=Jv(),t=f2();function n(r){return r!=null&&t(r.length)&&!e(r)}return Uf=n,Uf}var Wf,eg;function h0(){if(eg)return Wf;eg=1;var e=O$(),t=A$(),n=Jl();function r(a){return n(a)?e(a):t(a)}return Wf=r,Wf}var Vf,tg;function E$(){if(tg)return Vf;tg=1;var e=h$(),t=g$(),n=h0();function r(a){return e(a,n,t)}return Vf=r,Vf}var Kf,ng;function R$(){if(ng)return Kf;ng=1;var e=E$(),t=1,n=Object.prototype,r=n.hasOwnProperty;function a(i,u,l,c,m,f){var d=l&t,v=e(i),_=v.length,w=e(u),g=w.length;if(_!=g&&!d)return!1;for(var y=_;y--;){var b=v[y];if(!(d?b in u:r.call(u,b)))return!1}var O=f.get(i),C=f.get(u);if(O&&C)return O==u&&C==i;var k=!0;f.set(i,u),f.set(u,i);for(var P=d;++y<_;){b=v[y];var A=i[b],T=u[b];if(c)var q=d?c(T,A,b,u,i,f):c(A,T,b,i,u,f);if(!(q===void 0?A===T||m(A,T,l,c,f):q)){k=!1;break}P||(P=b=="constructor")}if(k&&!P){var j=i.constructor,B=u.constructor;j!=B&&"constructor"in i&&"constructor"in u&&!(typeof j=="function"&&j instanceof j&&typeof B=="function"&&B instanceof B)&&(k=!1)}return f.delete(i),f.delete(u),k}return Kf=a,Kf}var Xf,rg;function T$(){if(rg)return Xf;rg=1;var e=ti(),t=Fr(),n=e(t,"DataView");return Xf=n,Xf}var Yf,ag;function N$(){if(ag)return Yf;ag=1;var e=ti(),t=Fr(),n=e(t,"Promise");return Yf=n,Yf}var Qf,og;function lk(){if(og)return Qf;og=1;var e=ti(),t=Fr(),n=e(t,"Set");return Qf=n,Qf}var Zf,ig;function q$(){if(ig)return Zf;ig=1;var e=ti(),t=Fr(),n=e(t,"WeakMap");return Zf=n,Zf}var Jf,sg;function j$(){if(sg)return Jf;sg=1;var e=T$(),t=t2(),n=N$(),r=lk(),a=q$(),i=ha(),u=kO(),l="[object Map]",c="[object Object]",m="[object Promise]",f="[object Set]",d="[object WeakMap]",v="[object DataView]",_=u(e),w=u(t),g=u(n),y=u(r),b=u(a),O=i;return(e&&O(new e(new ArrayBuffer(1)))!=v||t&&O(new t)!=l||n&&O(n.resolve())!=m||r&&O(new r)!=f||a&&O(new a)!=d)&&(O=function(C){var k=i(C),P=k==c?C.constructor:void 0,A=P?u(P):"";if(A)switch(A){case _:return v;case w:return l;case g:return m;case y:return f;case b:return d}return k}),Jf=O,Jf}var e4,ug;function M$(){if(ug)return e4;ug=1;var e=JO(),t=rk(),n=v$(),r=R$(),a=j$(),i=Pn(),u=ok(),l=sk(),c=1,m="[object Arguments]",f="[object Array]",d="[object Object]",v=Object.prototype,_=v.hasOwnProperty;function w(g,y,b,O,C,k){var P=i(g),A=i(y),T=P?f:a(g),q=A?f:a(y);T=T==m?d:T,q=q==m?d:q;var j=T==d,B=q==d,$=T==q;if($&&u(g)){if(!u(y))return!1;P=!0,j=!1}if($&&!j)return k||(k=new e),P||l(g)?t(g,y,b,O,C,k):n(g,y,T,b,O,C,k);if(!(b&c)){var M=j&&_.call(g,"__wrapped__"),H=B&&_.call(y,"__wrapped__");if(M||H){var F=M?g.value():g,V=H?y.value():y;return k||(k=new e),C(F,V,b,O,k)}}return $?(k||(k=new e),r(g,y,b,O,C,k)):!1}return e4=w,e4}var t4,lg;function v2(){if(lg)return t4;lg=1;var e=M$(),t=ya();function n(r,a,i,u,l){return r===a?!0:r==null||a==null||!t(r)&&!t(a)?r!==r&&a!==a:e(r,a,i,u,n,l)}return t4=n,t4}var n4,cg;function I$(){if(cg)return n4;cg=1;var e=JO(),t=v2(),n=1,r=2;function a(i,u,l,c){var m=l.length,f=m,d=!c;if(i==null)return!f;for(i=Object(i);m--;){var v=l[m];if(d&&v[2]?v[1]!==i[v[0]]:!(v[0]in i))return!1}for(;++m-1}return x4=t,x4}var w4,Eg;function Y$(){if(Eg)return w4;Eg=1;function e(t,n,r){for(var a=-1,i=t==null?0:t.length;++a=u){var b=m?null:a(c);if(b)return i(b);w=!1,v=r,y=new e}else y=m?[]:g;e:for(;++d<_;){var O=c[d],C=m?m(O):O;if(O=f||O!==0?O:0,w&&C===C){for(var k=y.length;k--;)if(y[k]===C)continue e;m&&y.push(C),g.push(O)}else v(y,C,f)||(y!==g&&y.push(C),g.push(O))}return g}return P4=l,P4}var O4,qg;function eL(){if(qg)return O4;qg=1;var e=so(),t=J$();function n(r,a){return r&&r.length?t(r,e(a,2)):[]}return O4=n,O4}var tL=eL();const jg=tt(tL);function dk(e,t,n){return t===!0?jg(e,n):Ne(t)?jg(e,t):e}function ls(e){"@babel/helpers - typeof";return ls=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ls(e)}var nL=["ref"];function Mg(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Zr(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function pL(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function mL(e){return e.value}function dL(e,t){if(L.isValidElement(e))return L.cloneElement(e,t);if(typeof e=="function")return L.createElement(e,t);t.ref;var n=cL(t,nL);return L.createElement(c2,n)}var Dg=1,Vi=(function(e){function t(){var n;rL(this,t);for(var r=arguments.length,a=new Array(r),i=0;iDg||Math.abs(a.height-this.lastBoundingBox.height)>Dg)&&(this.lastBoundingBox.width=a.width,this.lastBoundingBox.height=a.height,r&&r(a)):(this.lastBoundingBox.width!==-1||this.lastBoundingBox.height!==-1)&&(this.lastBoundingBox.width=-1,this.lastBoundingBox.height=-1,r&&r(null))}},{key:"getBBoxSnapshot",value:function(){return this.lastBoundingBox.width>=0&&this.lastBoundingBox.height>=0?Zr({},this.lastBoundingBox):{width:0,height:0}}},{key:"getDefaultPosition",value:function(r){var a=this.props,i=a.layout,u=a.align,l=a.verticalAlign,c=a.margin,m=a.chartWidth,f=a.chartHeight,d,v;if(!r||(r.left===void 0||r.left===null)&&(r.right===void 0||r.right===null))if(u==="center"&&i==="vertical"){var _=this.getBBoxSnapshot();d={left:((m||0)-_.width)/2}}else d=u==="right"?{right:c&&c.right||0}:{left:c&&c.left||0};if(!r||(r.top===void 0||r.top===null)&&(r.bottom===void 0||r.bottom===null))if(l==="middle"){var w=this.getBBoxSnapshot();v={top:((f||0)-w.height)/2}}else v=l==="bottom"?{bottom:c&&c.bottom||0}:{top:c&&c.top||0};return Zr(Zr({},d),v)}},{key:"render",value:function(){var r=this,a=this.props,i=a.content,u=a.width,l=a.height,c=a.wrapperStyle,m=a.payloadUniqBy,f=a.payload,d=Zr(Zr({position:"absolute",width:u||"auto",height:l||"auto"},this.getDefaultPosition(c)),c);return L.createElement("div",{className:"recharts-legend-wrapper",style:d,ref:function(_){r.wrapperNode=_}},dL(i,Zr(Zr({},this.props),{},{payload:dk(f,m,mL)})))}}],[{key:"getWithHeight",value:function(r,a){var i=Zr(Zr({},this.defaultProps),r.props),u=i.layout;return u==="vertical"&&ce(r.props.height)?{height:r.props.height}:u==="horizontal"?{width:r.props.width||a}:null}}])})(R.PureComponent);y0(Vi,"displayName","Legend");y0(Vi,"defaultProps",{iconSize:14,layout:"horizontal",align:"center",verticalAlign:"bottom"});var k4,$g;function fL(){if($g)return k4;$g=1;var e=Zl(),t=m2(),n=Pn(),r=e?e.isConcatSpreadable:void 0;function a(i){return n(i)||t(i)||!!(r&&i&&i[r])}return k4=a,k4}var C4,Lg;function hk(){if(Lg)return C4;Lg=1;var e=ak(),t=fL();function n(r,a,i,u,l){var c=-1,m=r.length;for(i||(i=t),l||(l=[]);++c0&&i(f)?a>1?n(f,a-1,i,u,l):e(l,f):u||(l[l.length]=f)}return l}return C4=n,C4}var A4,Hg;function vL(){if(Hg)return A4;Hg=1;function e(t){return function(n,r,a){for(var i=-1,u=Object(n),l=a(n),c=l.length;c--;){var m=l[t?c:++i];if(r(u[m],m,u)===!1)break}return n}}return A4=e,A4}var E4,Gg;function hL(){if(Gg)return E4;Gg=1;var e=vL(),t=e();return E4=t,E4}var R4,Fg;function yk(){if(Fg)return R4;Fg=1;var e=hL(),t=h0();function n(r,a){return r&&e(r,a,t)}return R4=n,R4}var T4,Bg;function yL(){if(Bg)return T4;Bg=1;var e=Jl();function t(n,r){return function(a,i){if(a==null)return a;if(!e(a))return n(a,i);for(var u=a.length,l=r?u:-1,c=Object(a);(r?l--:++lr||l&&c&&f&&!m&&!d||i&&c&&f||!a&&f||!u)return 1;if(!i&&!l&&!d&&n=m)return f;var d=a[i];return f*(d=="desc"?-1:1)}}return n.index-r.index}return I4=t,I4}var D4,Xg;function wL(){if(Xg)return D4;Xg=1;var e=r2(),t=a2(),n=so(),r=_k(),a=_L(),i=ik(),u=xL(),l=Bs(),c=Pn();function m(f,d,v){d.length?d=e(d,function(g){return c(g)?function(y){return t(y,g.length===1?g[0]:g)}:g}):d=[l];var _=-1;d=e(d,i(n));var w=r(f,function(g,y,b){var O=e(d,function(C){return C(g)});return{criteria:O,index:++_,value:g}});return a(w,function(g,y){return u(g,y,v)})}return D4=m,D4}var $4,Yg;function bL(){if(Yg)return $4;Yg=1;function e(t,n,r){switch(r.length){case 0:return t.call(n);case 1:return t.call(n,r[0]);case 2:return t.call(n,r[0],r[1]);case 3:return t.call(n,r[0],r[1],r[2])}return t.apply(n,r)}return $4=e,$4}var L4,Qg;function SL(){if(Qg)return L4;Qg=1;var e=bL(),t=Math.max;function n(r,a,i){return a=t(a===void 0?r.length-1:a,0),function(){for(var u=arguments,l=-1,c=t(u.length-a,0),m=Array(c);++l0){if(++i>=e)return arguments[0]}else i=0;return a.apply(void 0,arguments)}}return B4=r,B4}var z4,nx;function CL(){if(nx)return z4;nx=1;var e=OL(),t=kL(),n=t(e);return z4=n,z4}var U4,rx;function AL(){if(rx)return U4;rx=1;var e=Bs(),t=SL(),n=CL();function r(a,i){return n(t(a,i,e),a+"")}return U4=r,U4}var W4,ax;function _0(){if(ax)return W4;ax=1;var e=e2(),t=Jl(),n=d2(),r=io();function a(i,u,l){if(!r(l))return!1;var c=typeof u;return(c=="number"?t(l)&&n(u,l.length):c=="string"&&u in l)?e(l[u],i):!1}return W4=a,W4}var V4,ox;function EL(){if(ox)return V4;ox=1;var e=hk(),t=wL(),n=AL(),r=_0(),a=n(function(i,u){if(i==null)return[];var l=u.length;return l>1&&r(i,u[0],u[1])?u=[]:l>2&&r(u[0],u[1],u[2])&&(u=[u[0]]),t(i,e(u,1),[])});return V4=a,V4}var RL=EL();const y2=tt(RL);function pl(e){"@babel/helpers - typeof";return pl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},pl(e)}function b5(){return b5=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=t.x),"".concat(Lu,"-left"),ce(n)&&t&&ce(t.x)&&n=t.y),"".concat(Lu,"-top"),ce(r)&&t&&ce(t.y)&&rg?Math.max(f,c[r]):Math.max(d,c[r])}function UL(e){var t=e.translateX,n=e.translateY,r=e.useTranslate3d;return{transform:r?"translate3d(".concat(t,"px, ").concat(n,"px, 0)"):"translate(".concat(t,"px, ").concat(n,"px)")}}function WL(e){var t=e.allowEscapeViewBox,n=e.coordinate,r=e.offsetTopLeft,a=e.position,i=e.reverseDirection,u=e.tooltipBox,l=e.useTranslate3d,c=e.viewBox,m,f,d;return u.height>0&&u.width>0&&n?(f=ux({allowEscapeViewBox:t,coordinate:n,key:"x",offsetTopLeft:r,position:a,reverseDirection:i,tooltipDimension:u.width,viewBox:c,viewBoxDimension:c.width}),d=ux({allowEscapeViewBox:t,coordinate:n,key:"y",offsetTopLeft:r,position:a,reverseDirection:i,tooltipDimension:u.height,viewBox:c,viewBoxDimension:c.height}),m=UL({translateX:f,translateY:d,useTranslate3d:l})):m=BL,{cssProperties:m,cssClasses:zL({translateX:f,translateY:d,coordinate:n})}}function cs(e){"@babel/helpers - typeof";return cs=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},cs(e)}function lx(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function cx(e){for(var t=1;tpx||Math.abs(r.height-this.state.lastBoundingBox.height)>px)&&this.setState({lastBoundingBox:{width:r.width,height:r.height}})}else(this.state.lastBoundingBox.width!==-1||this.state.lastBoundingBox.height!==-1)&&this.setState({lastBoundingBox:{width:-1,height:-1}})}},{key:"componentDidMount",value:function(){document.addEventListener("keydown",this.handleKeyDown),this.updateBBox()}},{key:"componentWillUnmount",value:function(){document.removeEventListener("keydown",this.handleKeyDown)}},{key:"componentDidUpdate",value:function(){var r,a;this.props.active&&this.updateBBox(),this.state.dismissed&&(((r=this.props.coordinate)===null||r===void 0?void 0:r.x)!==this.state.dismissedAtCoordinate.x||((a=this.props.coordinate)===null||a===void 0?void 0:a.y)!==this.state.dismissedAtCoordinate.y)&&(this.state.dismissed=!1)}},{key:"render",value:function(){var r=this,a=this.props,i=a.active,u=a.allowEscapeViewBox,l=a.animationDuration,c=a.animationEasing,m=a.children,f=a.coordinate,d=a.hasPayload,v=a.isAnimationActive,_=a.offset,w=a.position,g=a.reverseDirection,y=a.useTranslate3d,b=a.viewBox,O=a.wrapperStyle,C=WL({allowEscapeViewBox:u,coordinate:f,offsetTopLeft:_,position:w,reverseDirection:g,tooltipBox:this.state.lastBoundingBox,useTranslate3d:y,viewBox:b}),k=C.cssClasses,P=C.cssProperties,A=cx(cx({transition:v&&i?"transform ".concat(l,"ms ").concat(c):void 0},P),{},{pointerEvents:"none",visibility:!this.state.dismissed&&i&&d?"visible":"hidden",position:"absolute",top:0,left:0},O);return L.createElement("div",{tabIndex:-1,className:k,style:A,ref:function(q){r.wrapperNode=q}},m)}}])})(R.PureComponent),nH=function(){return!(typeof window<"u"&&window.document&&window.document.createElement&&window.setTimeout)},uo={isSsr:nH()};function ps(e){"@babel/helpers - typeof";return ps=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ps(e)}function mx(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function dx(e){for(var t=1;t0;return L.createElement(tH,{allowEscapeViewBox:u,animationDuration:l,animationEasing:c,isAnimationActive:v,active:i,coordinate:f,hasPayload:A,offset:_,position:y,reverseDirection:b,useTranslate3d:O,viewBox:C,wrapperStyle:k},mH(m,dx(dx({},this.props),{},{payload:P})))}}])})(R.PureComponent);_2(Or,"displayName","Tooltip");_2(Or,"defaultProps",{accessibilityLayer:!1,allowEscapeViewBox:{x:!1,y:!1},animationDuration:400,animationEasing:"ease",contentStyle:{},coordinate:{x:0,y:0},cursor:!0,cursorStyle:{},filterNull:!0,isAnimationActive:!uo.isSsr,itemStyle:{},labelStyle:{},offset:10,reverseDirection:{x:!1,y:!1},separator:" : ",trigger:"hover",useTranslate3d:!1,viewBox:{x:0,y:0,height:0,width:0},wrapperStyle:{}});var X4,fx;function dH(){if(fx)return X4;fx=1;var e=Fr(),t=function(){return e.Date.now()};return X4=t,X4}var Y4,vx;function fH(){if(vx)return Y4;vx=1;var e=/\s/;function t(n){for(var r=n.length;r--&&e.test(n.charAt(r)););return r}return Y4=t,Y4}var Q4,hx;function vH(){if(hx)return Q4;hx=1;var e=fH(),t=/^\s+/;function n(r){return r&&r.slice(0,e(r)+1).replace(t,"")}return Q4=n,Q4}var Z4,yx;function Pk(){if(yx)return Z4;yx=1;var e=vH(),t=io(),n=Hs(),r=NaN,a=/^[-+]0x[0-9a-f]+$/i,i=/^0b[01]+$/i,u=/^0o[0-7]+$/i,l=parseInt;function c(m){if(typeof m=="number")return m;if(n(m))return r;if(t(m)){var f=typeof m.valueOf=="function"?m.valueOf():m;m=t(f)?f+"":f}if(typeof m!="string")return m===0?m:+m;m=e(m);var d=i.test(m);return d||u.test(m)?l(m.slice(2),d?2:8):a.test(m)?r:+m}return Z4=c,Z4}var J4,_x;function hH(){if(_x)return J4;_x=1;var e=io(),t=dH(),n=Pk(),r="Expected a function",a=Math.max,i=Math.min;function u(l,c,m){var f,d,v,_,w,g,y=0,b=!1,O=!1,C=!0;if(typeof l!="function")throw new TypeError(r);c=n(c)||0,e(m)&&(b=!!m.leading,O="maxWait"in m,v=O?a(n(m.maxWait)||0,c):v,C="trailing"in m?!!m.trailing:C);function k(H){var F=f,V=d;return f=d=void 0,y=H,_=l.apply(V,F),_}function P(H){return y=H,w=setTimeout(q,c),b?k(H):_}function A(H){var F=H-g,V=H-y,K=c-F;return O?i(K,v-V):K}function T(H){var F=H-g,V=H-y;return g===void 0||F>=c||F<0||O&&V>=v}function q(){var H=t();if(T(H))return j(H);w=setTimeout(q,A(H))}function j(H){return w=void 0,C&&f?k(H):(f=d=void 0,_)}function B(){w!==void 0&&clearTimeout(w),y=0,f=g=d=w=void 0}function $(){return w===void 0?_:j(t())}function M(){var H=t(),F=T(H);if(f=arguments,d=this,g=H,F){if(w===void 0)return P(g);if(O)return clearTimeout(w),w=setTimeout(q,c),k(g)}return w===void 0&&(w=setTimeout(q,c)),_}return M.cancel=B,M.flush=$,M}return J4=u,J4}var e9,gx;function yH(){if(gx)return e9;gx=1;var e=hH(),t=io(),n="Expected a function";function r(a,i,u){var l=!0,c=!0;if(typeof a!="function")throw new TypeError(n);return t(u)&&(l="leading"in u?!!u.leading:l,c="trailing"in u?!!u.trailing:c),e(a,i,{leading:l,maxWait:i,trailing:c})}return e9=r,e9}var _H=yH();const Ok=tt(_H);function dl(e){"@babel/helpers - typeof";return dl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},dl(e)}function xx(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Op(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&(H=Ok(H,g,{trailing:!0,leading:!1}));var F=new ResizeObserver(H),V=P.current.getBoundingClientRect(),K=V.width,J=V.height;return $(K,J),F.observe(P.current),function(){F.disconnect()}},[$,g]);var M=R.useMemo(function(){var H=j.containerWidth,F=j.containerHeight;if(H<0||F<0)return null;ua(Ro(u)||Ro(c),`The width(%s) and height(%s) are both fixed numbers, + maybe you don't need to use a ResponsiveContainer.`,u,c),ua(!n||n>0,"The aspect(%s) must be greater than zero.",n);var V=Ro(u)?H:u,K=Ro(c)?F:c;n&&n>0&&(V?K=V/n:K&&(V=K*n),v&&K>v&&(K=v)),ua(V>0||K>0,`The width(%s) and height(%s) of chart should be greater than 0, please check the style of container, or the props width(%s) and height(%s), or add a minWidth(%s) or minHeight(%s) or use aspect(%s) to control the - height and width.`,q,M,i,u,p,c,n);var D=!Array.isArray(d)&&Nr(d.type).endsWith("Chart");return E.Children.map(d,function(j){return E.isValidElement(j)?P.cloneElement(j,vc({width:q,height:M},D?{style:vc({height:"100%",width:"100%",maxHeight:M,maxWidth:q},j.props.style)}:{})):j})},[n,d,u,m,c,p,C,i]);return E.createElement("div",{id:y?"".concat(y):void 0,className:le("recharts-responsive-container",v),style:vc(vc({},w),{},{width:i,height:u,minWidth:p,minHeight:c,maxHeight:m}),ref:x},A)}),C9=function(t){return null};C9.displayName="Cell";function Uu(e){"@babel/helpers - typeof";return Uu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Uu(e)}function gh(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function D3(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{};if(t==null||Da.isSsr)return{width:0,height:0};var r=cW(n),a=JSON.stringify({text:t,copyStyle:r});if(Bo.widthCache[a])return Bo.widthCache[a];try{var o=document.getElementById(_h);o||(o=document.createElement("span"),o.setAttribute("id",_h),o.setAttribute("aria-hidden","true"),document.body.appendChild(o));var i=D3(D3({},lW),r);Object.assign(o.style,i),o.textContent="".concat(t);var s=o.getBoundingClientRect(),u={width:s.width,height:s.height};return Bo.widthCache[a]=u,++Bo.cacheCount>uW&&(Bo.cacheCount=0,Bo.widthCache={}),u}catch{return{width:0,height:0}}},pW=function(t){return{top:t.top+window.scrollY-document.documentElement.clientTop,left:t.left+window.scrollX-document.documentElement.clientLeft}};function Wu(e){"@babel/helpers - typeof";return Wu=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Wu(e)}function Dp(e,t){return vW(e)||fW(e,t)||dW(e,t)||mW()}function mW(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function dW(e,t){if(e){if(typeof e=="string")return xh(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return xh(e,t)}}function xh(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EW(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function kh(e,t){return RW(e)||jW(e,t)||TW(e,t)||NW()}function NW(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function TW(e,t){if(e){if(typeof e=="string")return Ch(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Ch(e,t)}}function Ch(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&arguments[0]!==void 0?arguments[0]:[];return q.reduce(function(M,D){var j=D.word,I=D.width,B=M[M.length-1];if(B&&(a==null||o||B.width+I+rD.width?M:D})};if(!p)return d;for(var f="…",y=function(q){var M=c.slice(0,q),D=Dw({breakAll:l,style:u,children:M+f}).wordsWithComputedWidth,j=m(D),I=j.length>i||g(j).width>Number(a);return[I,j]},v=0,h=c.length-1,_=0,w;v<=h&&_<=c.length-1;){var x=Math.floor((v+h)/2),S=x-1,O=y(S),k=kh(O,2),C=k[0],N=k[1],T=y(x),A=kh(T,1),$=A[0];if(!C&&!$&&(v=x+1),C&&$&&(h=x-1),!C&&$){w=N;break}_++}return w||d},Ah=function(t){var n=ne(t)?[]:t.toString().split(Iw);return[{words:n}]},MW=function(t){var n=t.width,r=t.scaleToFit,a=t.children,o=t.style,i=t.breakAll,s=t.maxLines;if((n||r)&&!Da.isSsr){var u,l,p=Dw({breakAll:i,children:a,style:o});if(p){var c=p.wordsWithComputedWidth,m=p.spaceWidth;u=c,l=m}else return Ah(a);return $W({breakAll:i,children:a,maxLines:s,style:o},u,l,n,r)}return Ah(a)},Eh="#808080",Lp=function(t){var n=t.x,r=n===void 0?0:n,a=t.y,o=a===void 0?0:a,i=t.lineHeight,s=i===void 0?"1em":i,u=t.capHeight,l=u===void 0?"0.71em":u,p=t.scaleToFit,c=p===void 0?!1:p,m=t.textAnchor,d=m===void 0?"start":m,g=t.verticalAnchor,f=g===void 0?"end":g,y=t.fill,v=y===void 0?Eh:y,h=Oh(t,CW),_=P.useMemo(function(){return MW({breakAll:h.breakAll,children:h.children,maxLines:h.maxLines,scaleToFit:c,style:h.style,width:h.width})},[h.breakAll,h.children,h.maxLines,c,h.style,h.width]),w=h.dx,x=h.dy,S=h.angle,O=h.className,k=h.breakAll,C=Oh(h,AW);if(!it(r)||!it(o))return null;var N=r+(V(w)?w:0),T=o+(V(x)?x:0),A;switch(f){case"start":A=Um("calc(".concat(l,")"));break;case"middle":A=Um("calc(".concat((_.length-1)/2," * -").concat(s," + (").concat(l," / 2))"));break;default:A=Um("calc(".concat(_.length-1," * -").concat(s,")"));break}var $=[];if(c){var R=_[0].width,q=h.width;$.push("scale(".concat((V(q)?q/R:1)/R,")"))}return S&&$.push("rotate(".concat(S,", ").concat(N,", ").concat(T,")")),$.length&&(C.transform=$.join(" ")),E.createElement("text",L3({},ae(C,!0),{x:N,y:T,className:le("recharts-text",O),textAnchor:d,fill:v.includes("url")?Eh:v}),_.map(function(M,D){var j=M.words.join(k?"":" ");return E.createElement("tspan",{x:N,dy:D===0?A:s,key:"".concat(j,"-").concat(D)},j)}))};function Oa(e,t){return e==null||t==null?NaN:et?1:e>=t?0:NaN}function qW(e,t){return e==null||t==null?NaN:te?1:t>=e?0:NaN}function A9(e){let t,n,r;e.length!==2?(t=Oa,n=(s,u)=>Oa(e(s),u),r=(s,u)=>e(s)-u):(t=e===Oa||e===qW?e:IW,n=e,r=e);function a(s,u,l=0,p=s.length){if(l>>1;n(s[c],u)<0?l=c+1:p=c}while(l>>1;n(s[c],u)<=0?l=c+1:p=c}while(ll&&r(s[c-1],u)>-r(s[c],u)?c-1:c}return{left:a,center:i,right:o}}function IW(){return 0}function Lw(e){return e===null?NaN:+e}function*DW(e,t){for(let n of e)n!=null&&(n=+n)>=n&&(yield n)}const LW=A9(Oa),ql=LW.right;A9(Lw).center;class Nh extends Map{constructor(t,n=BW){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:n}}),t!=null)for(const[r,a]of t)this.set(r,a)}get(t){return super.get(Th(this,t))}has(t){return super.has(Th(this,t))}set(t,n){return super.set(HW(this,t),n)}delete(t){return super.delete(GW(this,t))}}function Th({_intern:e,_key:t},n){const r=t(n);return e.has(r)?e.get(r):n}function HW({_intern:e,_key:t},n){const r=t(n);return e.has(r)?e.get(r):(e.set(r,n),n)}function GW({_intern:e,_key:t},n){const r=t(n);return e.has(r)&&(n=e.get(r),e.delete(r)),n}function BW(e){return e!==null&&typeof e=="object"?e.valueOf():e}function FW(e=Oa){if(e===Oa)return Hw;if(typeof e!="function")throw new TypeError("compare is not a function");return(t,n)=>{const r=e(t,n);return r||r===0?r:(e(n,n)===0)-(e(t,t)===0)}}function Hw(e,t){return(e==null||!(e>=e))-(t==null||!(t>=t))||(et?1:0)}const zW=Math.sqrt(50),UW=Math.sqrt(10),WW=Math.sqrt(2);function Hp(e,t,n){const r=(t-e)/Math.max(0,n),a=Math.floor(Math.log10(r)),o=r/Math.pow(10,a),i=o>=zW?10:o>=UW?5:o>=WW?2:1;let s,u,l;return a<0?(l=Math.pow(10,-a)/i,s=Math.round(e*l),u=Math.round(t*l),s/lt&&--u,l=-l):(l=Math.pow(10,a)*i,s=Math.round(e/l),u=Math.round(t/l),s*lt&&--u),u0))return[];if(e===t)return[e];const r=t=a))return[];const s=o-a+1,u=new Array(s);if(r)if(i<0)for(let l=0;l=r)&&(n=r);return n}function Rh(e,t){let n;for(const r of e)r!=null&&(n>r||n===void 0&&r>=r)&&(n=r);return n}function Gw(e,t,n=0,r=1/0,a){if(t=Math.floor(t),n=Math.floor(Math.max(0,n)),r=Math.floor(Math.min(e.length-1,r)),!(n<=t&&t<=r))return e;for(a=a===void 0?Hw:FW(a);r>n;){if(r-n>600){const u=r-n+1,l=t-n+1,p=Math.log(u),c=.5*Math.exp(2*p/3),m=.5*Math.sqrt(p*c*(u-c)/u)*(l-u/2<0?-1:1),d=Math.max(n,Math.floor(t-l*c/u+m)),g=Math.min(r,Math.floor(t+(u-l)*c/u+m));Gw(e,t,d,g,a)}const o=e[t];let i=n,s=r;for(Us(e,n,t),a(e[r],o)>0&&Us(e,n,r);i0;)--s}a(e[n],o)===0?Us(e,n,s):(++s,Us(e,s,r)),s<=t&&(n=s+1),t<=s&&(r=s-1)}return e}function Us(e,t,n){const r=e[t];e[t]=e[n],e[n]=r}function VW(e,t,n){if(e=Float64Array.from(DW(e)),!(!(r=e.length)||isNaN(t=+t))){if(t<=0||r<2)return Rh(e);if(t>=1)return jh(e);var r,a=(r-1)*t,o=Math.floor(a),i=jh(Gw(e,o).subarray(0,o+1)),s=Rh(e.subarray(o+1));return i+(s-i)*(a-o)}}function KW(e,t,n=Lw){if(!(!(r=e.length)||isNaN(t=+t))){if(t<=0||r<2)return+n(e[0],0,e);if(t>=1)return+n(e[r-1],r-1,e);var r,a=(r-1)*t,o=Math.floor(a),i=+n(e[o],o,e),s=+n(e[o+1],o+1,e);return i+(s-i)*(a-o)}}function XW(e,t,n){e=+e,t=+t,n=(a=arguments.length)<2?(t=e,e=0,1):a<3?1:+n;for(var r=-1,a=Math.max(0,Math.ceil((t-e)/n))|0,o=new Array(a);++r>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?yc(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?yc(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=QW.exec(e))?new Gt(t[1],t[2],t[3],1):(t=ZW.exec(e))?new Gt(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=JW.exec(e))?yc(t[1],t[2],t[3],t[4]):(t=eV.exec(e))?yc(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=tV.exec(e))?Hh(t[1],t[2]/100,t[3]/100,1):(t=nV.exec(e))?Hh(t[1],t[2]/100,t[3]/100,t[4]):$h.hasOwnProperty(e)?Ih($h[e]):e==="transparent"?new Gt(NaN,NaN,NaN,0):null}function Ih(e){return new Gt(e>>16&255,e>>8&255,e&255,1)}function yc(e,t,n,r){return r<=0&&(e=t=n=NaN),new Gt(e,t,n,r)}function oV(e){return e instanceof Il||(e=Yu(e)),e?(e=e.rgb(),new Gt(e.r,e.g,e.b,e.opacity)):new Gt}function z3(e,t,n,r){return arguments.length===1?oV(e):new Gt(e,t,n,r??1)}function Gt(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}N9(Gt,z3,Fw(Il,{brighter(e){return e=e==null?Gp:Math.pow(Gp,e),new Gt(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?Ku:Math.pow(Ku,e),new Gt(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new Gt(fo(this.r),fo(this.g),fo(this.b),Bp(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Dh,formatHex:Dh,formatHex8:iV,formatRgb:Lh,toString:Lh}));function Dh(){return`#${to(this.r)}${to(this.g)}${to(this.b)}`}function iV(){return`#${to(this.r)}${to(this.g)}${to(this.b)}${to((isNaN(this.opacity)?1:this.opacity)*255)}`}function Lh(){const e=Bp(this.opacity);return`${e===1?"rgb(":"rgba("}${fo(this.r)}, ${fo(this.g)}, ${fo(this.b)}${e===1?")":`, ${e})`}`}function Bp(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function fo(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function to(e){return e=fo(e),(e<16?"0":"")+e.toString(16)}function Hh(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new qn(e,t,n,r)}function zw(e){if(e instanceof qn)return new qn(e.h,e.s,e.l,e.opacity);if(e instanceof Il||(e=Yu(e)),!e)return new qn;if(e instanceof qn)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,a=Math.min(t,n,r),o=Math.max(t,n,r),i=NaN,s=o-a,u=(o+a)/2;return s?(t===o?i=(n-r)/s+(n0&&u<1?0:i,new qn(i,s,u,e.opacity)}function sV(e,t,n,r){return arguments.length===1?zw(e):new qn(e,t,n,r??1)}function qn(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}N9(qn,sV,Fw(Il,{brighter(e){return e=e==null?Gp:Math.pow(Gp,e),new qn(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?Ku:Math.pow(Ku,e),new qn(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,a=2*n-r;return new Gt(Wm(e>=240?e-240:e+120,a,r),Wm(e,a,r),Wm(e<120?e+240:e-120,a,r),this.opacity)},clamp(){return new qn(Gh(this.h),gc(this.s),gc(this.l),Bp(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=Bp(this.opacity);return`${e===1?"hsl(":"hsla("}${Gh(this.h)}, ${gc(this.s)*100}%, ${gc(this.l)*100}%${e===1?")":`, ${e})`}`}}));function Gh(e){return e=(e||0)%360,e<0?e+360:e}function gc(e){return Math.max(0,Math.min(1,e||0))}function Wm(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}const T9=e=>()=>e;function uV(e,t){return function(n){return e+n*t}}function lV(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}function cV(e){return(e=+e)==1?Uw:function(t,n){return n-t?lV(t,n,e):T9(isNaN(t)?n:t)}}function Uw(e,t){var n=t-e;return n?uV(e,n):T9(isNaN(e)?t:e)}const Bh=function e(t){var n=cV(t);function r(a,o){var i=n((a=z3(a)).r,(o=z3(o)).r),s=n(a.g,o.g),u=n(a.b,o.b),l=Uw(a.opacity,o.opacity);return function(p){return a.r=i(p),a.g=s(p),a.b=u(p),a.opacity=l(p),a+""}}return r.gamma=e,r}(1);function pV(e,t){t||(t=[]);var n=e?Math.min(t.length,e.length):0,r=t.slice(),a;return function(o){for(a=0;an&&(o=t.slice(n,o),s[i]?s[i]+=o:s[++i]=o),(r=r[0])===(a=a[0])?s[i]?s[i]+=a:s[++i]=a:(s[++i]=null,u.push({i,x:Fp(r,a)})),n=Vm.lastIndex;return nt&&(n=e,e=t,t=n),function(r){return Math.max(e,Math.min(t,r))}}function bV(e,t,n){var r=e[0],a=e[1],o=t[0],i=t[1];return a2?SV:bV,u=l=null,c}function c(m){return m==null||isNaN(m=+m)?o:(u||(u=s(e.map(r),t,n)))(r(i(m)))}return c.invert=function(m){return i(a((l||(l=s(t,e.map(r),Fp)))(m)))},c.domain=function(m){return arguments.length?(e=Array.from(m,zp),p()):e.slice()},c.range=function(m){return arguments.length?(t=Array.from(m),p()):t.slice()},c.rangeRound=function(m){return t=Array.from(m),n=j9,p()},c.clamp=function(m){return arguments.length?(i=m?!0:Mt,p()):i!==Mt},c.interpolate=function(m){return arguments.length?(n=m,p()):n},c.unknown=function(m){return arguments.length?(o=m,c):o},function(m,d){return r=m,a=d,p()}}function R9(){return S1()(Mt,Mt)}function PV(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function Up(e,t){if(!isFinite(e)||e===0)return null;var n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"),r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]}function Bi(e){return e=Up(Math.abs(e)),e?e[1]:NaN}function OV(e,t){return function(n,r){for(var a=n.length,o=[],i=0,s=e[0],u=0;a>0&&s>0&&(u+s+1>r&&(s=Math.max(1,r-u)),o.push(n.substring(a-=s,a+s)),!((u+=s+1)>r));)s=e[i=(i+1)%e.length];return o.reverse().join(t)}}function kV(e){return function(t){return t.replace(/[0-9]/g,function(n){return e[+n]})}}var CV=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function Qu(e){if(!(t=CV.exec(e)))throw new Error("invalid format: "+e);var t;return new $9({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}Qu.prototype=$9.prototype;function $9(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}$9.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function AV(e){e:for(var t=e.length,n=1,r=-1,a;n0&&(r=0);break}return r>0?e.slice(0,r)+e.slice(a+1):e}var Wp;function EV(e,t){var n=Up(e,t);if(!n)return Wp=void 0,e.toPrecision(t);var r=n[0],a=n[1],o=a-(Wp=Math.max(-8,Math.min(8,Math.floor(a/3)))*3)+1,i=r.length;return o===i?r:o>i?r+new Array(o-i+1).join("0"):o>0?r.slice(0,o)+"."+r.slice(o):"0."+new Array(1-o).join("0")+Up(e,Math.max(0,t+o-1))[0]}function zh(e,t){var n=Up(e,t);if(!n)return e+"";var r=n[0],a=n[1];return a<0?"0."+new Array(-a).join("0")+r:r.length>a+1?r.slice(0,a+1)+"."+r.slice(a+1):r+new Array(a-r.length+2).join("0")}const Uh={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:PV,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>zh(e*100,t),r:zh,s:EV,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function Wh(e){return e}var Vh=Array.prototype.map,Kh=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function NV(e){var t=e.grouping===void 0||e.thousands===void 0?Wh:OV(Vh.call(e.grouping,Number),e.thousands+""),n=e.currency===void 0?"":e.currency[0]+"",r=e.currency===void 0?"":e.currency[1]+"",a=e.decimal===void 0?".":e.decimal+"",o=e.numerals===void 0?Wh:kV(Vh.call(e.numerals,String)),i=e.percent===void 0?"%":e.percent+"",s=e.minus===void 0?"−":e.minus+"",u=e.nan===void 0?"NaN":e.nan+"";function l(c,m){c=Qu(c);var d=c.fill,g=c.align,f=c.sign,y=c.symbol,v=c.zero,h=c.width,_=c.comma,w=c.precision,x=c.trim,S=c.type;S==="n"?(_=!0,S="g"):Uh[S]||(w===void 0&&(w=12),x=!0,S="g"),(v||d==="0"&&g==="=")&&(v=!0,d="0",g="=");var O=(m&&m.prefix!==void 0?m.prefix:"")+(y==="$"?n:y==="#"&&/[boxX]/.test(S)?"0"+S.toLowerCase():""),k=(y==="$"?r:/[%p]/.test(S)?i:"")+(m&&m.suffix!==void 0?m.suffix:""),C=Uh[S],N=/[defgprs%]/.test(S);w=w===void 0?6:/[gprs]/.test(S)?Math.max(1,Math.min(21,w)):Math.max(0,Math.min(20,w));function T(A){var $=O,R=k,q,M,D;if(S==="c")R=C(A)+R,A="";else{A=+A;var j=A<0||1/A<0;if(A=isNaN(A)?u:C(Math.abs(A),w),x&&(A=AV(A)),j&&+A==0&&f!=="+"&&(j=!1),$=(j?f==="("?f:s:f==="-"||f==="("?"":f)+$,R=(S==="s"&&!isNaN(A)&&Wp!==void 0?Kh[8+Wp/3]:"")+R+(j&&f==="("?")":""),N){for(q=-1,M=A.length;++qD||D>57){R=(D===46?a+A.slice(q+1):A.slice(q))+R,A=A.slice(0,q);break}}}_&&!v&&(A=t(A,1/0));var I=$.length+A.length+R.length,B=I>1)+$+A+R+B.slice(I);break;default:A=B+$+A+R;break}return o(A)}return T.toString=function(){return c+""},T}function p(c,m){var d=Math.max(-8,Math.min(8,Math.floor(Bi(m)/3)))*3,g=Math.pow(10,-d),f=l((c=Qu(c),c.type="f",c),{suffix:Kh[8+d/3]});return function(y){return f(g*y)}}return{format:l,formatPrefix:p}}var _c,M9,Ww;TV({thousands:",",grouping:[3],currency:["$",""]});function TV(e){return _c=NV(e),M9=_c.format,Ww=_c.formatPrefix,_c}function jV(e){return Math.max(0,-Bi(Math.abs(e)))}function RV(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(Bi(t)/3)))*3-Bi(Math.abs(e)))}function $V(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,Bi(t)-Bi(e))+1}function Vw(e,t,n,r){var a=B3(e,t,n),o;switch(r=Qu(r??",f"),r.type){case"s":{var i=Math.max(Math.abs(e),Math.abs(t));return r.precision==null&&!isNaN(o=RV(a,i))&&(r.precision=o),Ww(r,i)}case"":case"e":case"g":case"p":case"r":{r.precision==null&&!isNaN(o=$V(a,Math.max(Math.abs(e),Math.abs(t))))&&(r.precision=o-(r.type==="e"));break}case"f":case"%":{r.precision==null&&!isNaN(o=jV(a))&&(r.precision=o-(r.type==="%")*2);break}}return M9(r)}function La(e){var t=e.domain;return e.ticks=function(n){var r=t();return H3(r[0],r[r.length-1],n??10)},e.tickFormat=function(n,r){var a=t();return Vw(a[0],a[a.length-1],n??10,r)},e.nice=function(n){n==null&&(n=10);var r=t(),a=0,o=r.length-1,i=r[a],s=r[o],u,l,p=10;for(s0;){if(l=G3(i,s,n),l===u)return r[a]=i,r[o]=s,t(r);if(l>0)i=Math.floor(i/l)*l,s=Math.ceil(s/l)*l;else if(l<0)i=Math.ceil(i*l)/l,s=Math.floor(s*l)/l;else break;u=l}return e},e}function Vp(){var e=R9();return e.copy=function(){return Dl(e,Vp())},Pn.apply(e,arguments),La(e)}function Kw(e){var t;function n(r){return r==null||isNaN(r=+r)?t:r}return n.invert=n,n.domain=n.range=function(r){return arguments.length?(e=Array.from(r,zp),n):e.slice()},n.unknown=function(r){return arguments.length?(t=r,n):t},n.copy=function(){return Kw(e).unknown(t)},e=arguments.length?Array.from(e,zp):[0,1],La(n)}function Xw(e,t){e=e.slice();var n=0,r=e.length-1,a=e[n],o=e[r],i;return oMath.pow(e,t)}function LV(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}function Qh(e){return(t,n)=>-e(-t,n)}function q9(e){const t=e(Xh,Yh),n=t.domain;let r=10,a,o;function i(){return a=LV(r),o=DV(r),n()[0]<0?(a=Qh(a),o=Qh(o),e(MV,qV)):e(Xh,Yh),t}return t.base=function(s){return arguments.length?(r=+s,i()):r},t.domain=function(s){return arguments.length?(n(s),i()):n()},t.ticks=s=>{const u=n();let l=u[0],p=u[u.length-1];const c=p0){for(;m<=d;++m)for(g=1;gp)break;v.push(f)}}else for(;m<=d;++m)for(g=r-1;g>=1;--g)if(f=m>0?g/o(-m):g*o(m),!(fp)break;v.push(f)}v.length*2{if(s==null&&(s=10),u==null&&(u=r===10?"s":","),typeof u!="function"&&(!(r%1)&&(u=Qu(u)).precision==null&&(u.trim=!0),u=M9(u)),s===1/0)return u;const l=Math.max(1,r*s/t.ticks().length);return p=>{let c=p/o(Math.round(a(p)));return c*rn(Xw(n(),{floor:s=>o(Math.floor(a(s))),ceil:s=>o(Math.ceil(a(s)))})),t}function Yw(){const e=q9(S1()).domain([1,10]);return e.copy=()=>Dl(e,Yw()).base(e.base()),Pn.apply(e,arguments),e}function Zh(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function Jh(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function I9(e){var t=1,n=e(Zh(t),Jh(t));return n.constant=function(r){return arguments.length?e(Zh(t=+r),Jh(t)):t},La(n)}function Qw(){var e=I9(S1());return e.copy=function(){return Dl(e,Qw()).constant(e.constant())},Pn.apply(e,arguments)}function e6(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function HV(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function GV(e){return e<0?-e*e:e*e}function D9(e){var t=e(Mt,Mt),n=1;function r(){return n===1?e(Mt,Mt):n===.5?e(HV,GV):e(e6(n),e6(1/n))}return t.exponent=function(a){return arguments.length?(n=+a,r()):n},La(t)}function L9(){var e=D9(S1());return e.copy=function(){return Dl(e,L9()).exponent(e.exponent())},Pn.apply(e,arguments),e}function BV(){return L9.apply(null,arguments).exponent(.5)}function t6(e){return Math.sign(e)*e*e}function FV(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function Zw(){var e=R9(),t=[0,1],n=!1,r;function a(o){var i=FV(e(o));return isNaN(i)?r:n?Math.round(i):i}return a.invert=function(o){return e.invert(t6(o))},a.domain=function(o){return arguments.length?(e.domain(o),a):e.domain()},a.range=function(o){return arguments.length?(e.range((t=Array.from(o,zp)).map(t6)),a):t.slice()},a.rangeRound=function(o){return a.range(o).round(!0)},a.round=function(o){return arguments.length?(n=!!o,a):n},a.clamp=function(o){return arguments.length?(e.clamp(o),a):e.clamp()},a.unknown=function(o){return arguments.length?(r=o,a):r},a.copy=function(){return Zw(e.domain(),t).round(n).clamp(e.clamp()).unknown(r)},Pn.apply(a,arguments),La(a)}function Jw(){var e=[],t=[],n=[],r;function a(){var i=0,s=Math.max(1,t.length);for(n=new Array(s-1);++i0?n[s-1]:e[0],s=n?[r[n-1],t]:[r[l-1],r[l]]},i.unknown=function(u){return arguments.length&&(o=u),i},i.thresholds=function(){return r.slice()},i.copy=function(){return eb().domain([e,t]).range(a).unknown(o)},Pn.apply(La(i),arguments)}function tb(){var e=[.5],t=[0,1],n,r=1;function a(o){return o!=null&&o<=o?t[ql(e,o,0,r)]:n}return a.domain=function(o){return arguments.length?(e=Array.from(o),r=Math.min(e.length,t.length-1),a):e.slice()},a.range=function(o){return arguments.length?(t=Array.from(o),r=Math.min(e.length,t.length-1),a):t.slice()},a.invertExtent=function(o){var i=t.indexOf(o);return[e[i-1],e[i]]},a.unknown=function(o){return arguments.length?(n=o,a):n},a.copy=function(){return tb().domain(e).range(t).unknown(n)},Pn.apply(a,arguments)}const Km=new Date,Xm=new Date;function ut(e,t,n,r){function a(o){return e(o=arguments.length===0?new Date:new Date(+o)),o}return a.floor=o=>(e(o=new Date(+o)),o),a.ceil=o=>(e(o=new Date(o-1)),t(o,1),e(o),o),a.round=o=>{const i=a(o),s=a.ceil(o);return o-i(t(o=new Date(+o),i==null?1:Math.floor(i)),o),a.range=(o,i,s)=>{const u=[];if(o=a.ceil(o),s=s==null?1:Math.floor(s),!(o0))return u;let l;do u.push(l=new Date(+o)),t(o,s),e(o);while(lut(i=>{if(i>=i)for(;e(i),!o(i);)i.setTime(i-1)},(i,s)=>{if(i>=i)if(s<0)for(;++s<=0;)for(;t(i,-1),!o(i););else for(;--s>=0;)for(;t(i,1),!o(i););}),n&&(a.count=(o,i)=>(Km.setTime(+o),Xm.setTime(+i),e(Km),e(Xm),Math.floor(n(Km,Xm))),a.every=o=>(o=Math.floor(o),!isFinite(o)||!(o>0)?null:o>1?a.filter(r?i=>r(i)%o===0:i=>a.count(0,i)%o===0):a)),a}const Kp=ut(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);Kp.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?ut(t=>{t.setTime(Math.floor(t/e)*e)},(t,n)=>{t.setTime(+t+n*e)},(t,n)=>(n-t)/e):Kp);Kp.range;const kr=1e3,yn=kr*60,Cr=yn*60,Lr=Cr*24,H9=Lr*7,n6=Lr*30,Ym=Lr*365,no=ut(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*kr)},(e,t)=>(t-e)/kr,e=>e.getUTCSeconds());no.range;const G9=ut(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*kr)},(e,t)=>{e.setTime(+e+t*yn)},(e,t)=>(t-e)/yn,e=>e.getMinutes());G9.range;const B9=ut(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*yn)},(e,t)=>(t-e)/yn,e=>e.getUTCMinutes());B9.range;const F9=ut(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*kr-e.getMinutes()*yn)},(e,t)=>{e.setTime(+e+t*Cr)},(e,t)=>(t-e)/Cr,e=>e.getHours());F9.range;const z9=ut(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*Cr)},(e,t)=>(t-e)/Cr,e=>e.getUTCHours());z9.range;const Ll=ut(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*yn)/Lr,e=>e.getDate()-1);Ll.range;const P1=ut(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/Lr,e=>e.getUTCDate()-1);P1.range;const nb=ut(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/Lr,e=>Math.floor(e/Lr));nb.range;function Mo(e){return ut(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,n)=>{t.setDate(t.getDate()+n*7)},(t,n)=>(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*yn)/H9)}const O1=Mo(0),Xp=Mo(1),zV=Mo(2),UV=Mo(3),Fi=Mo(4),WV=Mo(5),VV=Mo(6);O1.range;Xp.range;zV.range;UV.range;Fi.range;WV.range;VV.range;function qo(e){return ut(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,n)=>{t.setUTCDate(t.getUTCDate()+n*7)},(t,n)=>(n-t)/H9)}const k1=qo(0),Yp=qo(1),KV=qo(2),XV=qo(3),zi=qo(4),YV=qo(5),QV=qo(6);k1.range;Yp.range;KV.range;XV.range;zi.range;YV.range;QV.range;const U9=ut(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());U9.range;const W9=ut(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());W9.range;const Hr=ut(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());Hr.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:ut(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,n)=>{t.setFullYear(t.getFullYear()+n*e)});Hr.range;const Gr=ut(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());Gr.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:ut(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,n)=>{t.setUTCFullYear(t.getUTCFullYear()+n*e)});Gr.range;function rb(e,t,n,r,a,o){const i=[[no,1,kr],[no,5,5*kr],[no,15,15*kr],[no,30,30*kr],[o,1,yn],[o,5,5*yn],[o,15,15*yn],[o,30,30*yn],[a,1,Cr],[a,3,3*Cr],[a,6,6*Cr],[a,12,12*Cr],[r,1,Lr],[r,2,2*Lr],[n,1,H9],[t,1,n6],[t,3,3*n6],[e,1,Ym]];function s(l,p,c){const m=py).right(i,m);if(d===i.length)return e.every(B3(l/Ym,p/Ym,c));if(d===0)return Kp.every(Math.max(B3(l,p,c),1));const[g,f]=i[m/i[d-1][2]53)return null;"w"in L||(L.w=1),"Z"in L?(re=Zm(Ws(L.y,0,1)),Re=re.getUTCDay(),re=Re>4||Re===0?Yp.ceil(re):Yp(re),re=P1.offset(re,(L.V-1)*7),L.y=re.getUTCFullYear(),L.m=re.getUTCMonth(),L.d=re.getUTCDate()+(L.w+6)%7):(re=Qm(Ws(L.y,0,1)),Re=re.getDay(),re=Re>4||Re===0?Xp.ceil(re):Xp(re),re=Ll.offset(re,(L.V-1)*7),L.y=re.getFullYear(),L.m=re.getMonth(),L.d=re.getDate()+(L.w+6)%7)}else("W"in L||"U"in L)&&("w"in L||(L.w="u"in L?L.u%7:"W"in L?1:0),Re="Z"in L?Zm(Ws(L.y,0,1)).getUTCDay():Qm(Ws(L.y,0,1)).getDay(),L.m=0,L.d="W"in L?(L.w+6)%7+L.W*7-(Re+5)%7:L.w+L.U*7-(Re+6)%7);return"Z"in L?(L.H+=L.Z/100|0,L.M+=L.Z%100,Zm(L)):Qm(L)}}function k(W,K,X,L){for(var pe=0,re=K.length,Re=X.length,$e,Ze;pe=Re)return-1;if($e=K.charCodeAt(pe++),$e===37){if($e=K.charAt(pe++),Ze=x[$e in r6?K.charAt(pe++):$e],!Ze||(L=Ze(W,X,L))<0)return-1}else if($e!=X.charCodeAt(L++))return-1}return L}function C(W,K,X){var L=l.exec(K.slice(X));return L?(W.p=p.get(L[0].toLowerCase()),X+L[0].length):-1}function N(W,K,X){var L=d.exec(K.slice(X));return L?(W.w=g.get(L[0].toLowerCase()),X+L[0].length):-1}function T(W,K,X){var L=c.exec(K.slice(X));return L?(W.w=m.get(L[0].toLowerCase()),X+L[0].length):-1}function A(W,K,X){var L=v.exec(K.slice(X));return L?(W.m=h.get(L[0].toLowerCase()),X+L[0].length):-1}function $(W,K,X){var L=f.exec(K.slice(X));return L?(W.m=y.get(L[0].toLowerCase()),X+L[0].length):-1}function R(W,K,X){return k(W,t,K,X)}function q(W,K,X){return k(W,n,K,X)}function M(W,K,X){return k(W,r,K,X)}function D(W){return i[W.getDay()]}function j(W){return o[W.getDay()]}function I(W){return u[W.getMonth()]}function B(W){return s[W.getMonth()]}function U(W){return a[+(W.getHours()>=12)]}function F(W){return 1+~~(W.getMonth()/3)}function Z(W){return i[W.getUTCDay()]}function ie(W){return o[W.getUTCDay()]}function he(W){return u[W.getUTCMonth()]}function be(W){return s[W.getUTCMonth()]}function J(W){return a[+(W.getUTCHours()>=12)]}function ue(W){return 1+~~(W.getUTCMonth()/3)}return{format:function(W){var K=S(W+="",_);return K.toString=function(){return W},K},parse:function(W){var K=O(W+="",!1);return K.toString=function(){return W},K},utcFormat:function(W){var K=S(W+="",w);return K.toString=function(){return W},K},utcParse:function(W){var K=O(W+="",!0);return K.toString=function(){return W},K}}}var r6={"-":"",_:" ",0:"0"},dt=/^\s*\d+/,rK=/^%/,aK=/[\\^$*+?|[\]().{}]/g;function ve(e,t,n){var r=e<0?"-":"",a=(r?-e:e)+"",o=a.length;return r+(o[t.toLowerCase(),n]))}function iK(e,t,n){var r=dt.exec(t.slice(n,n+1));return r?(e.w=+r[0],n+r[0].length):-1}function sK(e,t,n){var r=dt.exec(t.slice(n,n+1));return r?(e.u=+r[0],n+r[0].length):-1}function uK(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.U=+r[0],n+r[0].length):-1}function lK(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.V=+r[0],n+r[0].length):-1}function cK(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.W=+r[0],n+r[0].length):-1}function a6(e,t,n){var r=dt.exec(t.slice(n,n+4));return r?(e.y=+r[0],n+r[0].length):-1}function o6(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function pK(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function mK(e,t,n){var r=dt.exec(t.slice(n,n+1));return r?(e.q=r[0]*3-3,n+r[0].length):-1}function dK(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function i6(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function fK(e,t,n){var r=dt.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function s6(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function vK(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function hK(e,t,n){var r=dt.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function yK(e,t,n){var r=dt.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function gK(e,t,n){var r=dt.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function _K(e,t,n){var r=rK.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function xK(e,t,n){var r=dt.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function wK(e,t,n){var r=dt.exec(t.slice(n));return r?(e.s=+r[0],n+r[0].length):-1}function u6(e,t){return ve(e.getDate(),t,2)}function bK(e,t){return ve(e.getHours(),t,2)}function SK(e,t){return ve(e.getHours()%12||12,t,2)}function PK(e,t){return ve(1+Ll.count(Hr(e),e),t,3)}function ab(e,t){return ve(e.getMilliseconds(),t,3)}function OK(e,t){return ab(e,t)+"000"}function kK(e,t){return ve(e.getMonth()+1,t,2)}function CK(e,t){return ve(e.getMinutes(),t,2)}function AK(e,t){return ve(e.getSeconds(),t,2)}function EK(e){var t=e.getDay();return t===0?7:t}function NK(e,t){return ve(O1.count(Hr(e)-1,e),t,2)}function ob(e){var t=e.getDay();return t>=4||t===0?Fi(e):Fi.ceil(e)}function TK(e,t){return e=ob(e),ve(Fi.count(Hr(e),e)+(Hr(e).getDay()===4),t,2)}function jK(e){return e.getDay()}function RK(e,t){return ve(Xp.count(Hr(e)-1,e),t,2)}function $K(e,t){return ve(e.getFullYear()%100,t,2)}function MK(e,t){return e=ob(e),ve(e.getFullYear()%100,t,2)}function qK(e,t){return ve(e.getFullYear()%1e4,t,4)}function IK(e,t){var n=e.getDay();return e=n>=4||n===0?Fi(e):Fi.ceil(e),ve(e.getFullYear()%1e4,t,4)}function DK(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+ve(t/60|0,"0",2)+ve(t%60,"0",2)}function l6(e,t){return ve(e.getUTCDate(),t,2)}function LK(e,t){return ve(e.getUTCHours(),t,2)}function HK(e,t){return ve(e.getUTCHours()%12||12,t,2)}function GK(e,t){return ve(1+P1.count(Gr(e),e),t,3)}function ib(e,t){return ve(e.getUTCMilliseconds(),t,3)}function BK(e,t){return ib(e,t)+"000"}function FK(e,t){return ve(e.getUTCMonth()+1,t,2)}function zK(e,t){return ve(e.getUTCMinutes(),t,2)}function UK(e,t){return ve(e.getUTCSeconds(),t,2)}function WK(e){var t=e.getUTCDay();return t===0?7:t}function VK(e,t){return ve(k1.count(Gr(e)-1,e),t,2)}function sb(e){var t=e.getUTCDay();return t>=4||t===0?zi(e):zi.ceil(e)}function KK(e,t){return e=sb(e),ve(zi.count(Gr(e),e)+(Gr(e).getUTCDay()===4),t,2)}function XK(e){return e.getUTCDay()}function YK(e,t){return ve(Yp.count(Gr(e)-1,e),t,2)}function QK(e,t){return ve(e.getUTCFullYear()%100,t,2)}function ZK(e,t){return e=sb(e),ve(e.getUTCFullYear()%100,t,2)}function JK(e,t){return ve(e.getUTCFullYear()%1e4,t,4)}function eX(e,t){var n=e.getUTCDay();return e=n>=4||n===0?zi(e):zi.ceil(e),ve(e.getUTCFullYear()%1e4,t,4)}function tX(){return"+0000"}function c6(){return"%"}function p6(e){return+e}function m6(e){return Math.floor(+e/1e3)}var Fo,ub,lb;nX({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function nX(e){return Fo=nK(e),ub=Fo.format,Fo.parse,lb=Fo.utcFormat,Fo.utcParse,Fo}function rX(e){return new Date(e)}function aX(e){return e instanceof Date?+e:+new Date(+e)}function V9(e,t,n,r,a,o,i,s,u,l){var p=R9(),c=p.invert,m=p.domain,d=l(".%L"),g=l(":%S"),f=l("%I:%M"),y=l("%I %p"),v=l("%a %d"),h=l("%b %d"),_=l("%B"),w=l("%Y");function x(S){return(u(S)t(a/(e.length-1)))},n.quantiles=function(r){return Array.from({length:r+1},(a,o)=>VW(e,o/r))},n.copy=function(){return db(t).domain(e)},Wr.apply(n,arguments)}function A1(){var e=0,t=.5,n=1,r=1,a,o,i,s,u,l=Mt,p,c=!1,m;function d(f){return isNaN(f=+f)?m:(f=.5+((f=+p(f))-o)*(r*ft}var mX=pX,dX=yb,fX=mX,vX=Cs;function hX(e){return e&&e.length?dX(e,vX,fX):void 0}var yX=hX;const fa=Ae(yX);function gX(e,t){return ee.e^o.s<0?1:-1;for(r=o.d.length,a=e.d.length,t=0,n=re.d[t]^o.s<0?1:-1;return r===a?0:r>a^o.s<0?1:-1};Q.decimalPlaces=Q.dp=function(){var e=this,t=e.d.length-1,n=(t-e.e)*De;if(t=e.d[t],t)for(;t%10==0;t/=10)n--;return n<0?0:n};Q.dividedBy=Q.div=function(e){return jr(this,new this.constructor(e))};Q.dividedToIntegerBy=Q.idiv=function(e){var t=this,n=t.constructor;return Ne(jr(t,new n(e),0,1),n.precision)};Q.equals=Q.eq=function(e){return!this.cmp(e)};Q.exponent=function(){return tt(this)};Q.greaterThan=Q.gt=function(e){return this.cmp(e)>0};Q.greaterThanOrEqualTo=Q.gte=function(e){return this.cmp(e)>=0};Q.isInteger=Q.isint=function(){return this.e>this.d.length-2};Q.isNegative=Q.isneg=function(){return this.s<0};Q.isPositive=Q.ispos=function(){return this.s>0};Q.isZero=function(){return this.s===0};Q.lessThan=Q.lt=function(e){return this.cmp(e)<0};Q.lessThanOrEqualTo=Q.lte=function(e){return this.cmp(e)<1};Q.logarithm=Q.log=function(e){var t,n=this,r=n.constructor,a=r.precision,o=a+5;if(e===void 0)e=new r(10);else if(e=new r(e),e.s<1||e.eq(en))throw Error(bn+"NaN");if(n.s<1)throw Error(bn+(n.s?"NaN":"-Infinity"));return n.eq(en)?new r(0):(Ge=!1,t=jr(Zu(n,o),Zu(e,o),o),Ge=!0,Ne(t,a))};Q.minus=Q.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?wb(t,e):_b(t,(e.s=-e.s,e))};Q.modulo=Q.mod=function(e){var t,n=this,r=n.constructor,a=r.precision;if(e=new r(e),!e.s)throw Error(bn+"NaN");return n.s?(Ge=!1,t=jr(n,e,0,1).times(e),Ge=!0,n.minus(t)):Ne(new r(n),a)};Q.naturalExponential=Q.exp=function(){return xb(this)};Q.naturalLogarithm=Q.ln=function(){return Zu(this)};Q.negated=Q.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e};Q.plus=Q.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?_b(t,e):wb(t,(e.s=-e.s,e))};Q.precision=Q.sd=function(e){var t,n,r,a=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(vo+e);if(t=tt(a)+1,r=a.d.length-1,n=r*De+1,r=a.d[r],r){for(;r%10==0;r/=10)n--;for(r=a.d[0];r>=10;r/=10)n++}return e&&t>n?t:n};Q.squareRoot=Q.sqrt=function(){var e,t,n,r,a,o,i,s=this,u=s.constructor;if(s.s<1){if(!s.s)return new u(0);throw Error(bn+"NaN")}for(e=tt(s),Ge=!1,a=Math.sqrt(+s),a==0||a==1/0?(t=or(s.d),(t.length+e)%2==0&&(t+="0"),a=Math.sqrt(t),e=Ns((e+1)/2)-(e<0||e%2),a==1/0?t="5e"+e:(t=a.toExponential(),t=t.slice(0,t.indexOf("e")+1)+e),r=new u(t)):r=new u(a.toString()),n=u.precision,a=i=n+3;;)if(o=r,r=o.plus(jr(s,o,i+2)).times(.5),or(o.d).slice(0,i)===(t=or(r.d)).slice(0,i)){if(t=t.slice(i-3,i+1),a==i&&t=="4999"){if(Ne(o,n+1,0),o.times(o).eq(s)){r=o;break}}else if(t!="9999")break;i+=4}return Ge=!0,Ne(r,n)};Q.times=Q.mul=function(e){var t,n,r,a,o,i,s,u,l,p=this,c=p.constructor,m=p.d,d=(e=new c(e)).d;if(!p.s||!e.s)return new c(0);for(e.s*=p.s,n=p.e+e.e,u=m.length,l=d.length,u=0;){for(t=0,a=u+r;a>r;)s=o[a]+d[r]*m[a-r-1]+t,o[a--]=s%ct|0,t=s/ct|0;o[a]=(o[a]+t)%ct|0}for(;!o[--i];)o.pop();return t?++n:o.shift(),e.d=o,e.e=n,Ge?Ne(e,c.precision):e};Q.toDecimalPlaces=Q.todp=function(e,t){var n=this,r=n.constructor;return n=new r(n),e===void 0?n:(vr(e,0,Es),t===void 0?t=r.rounding:vr(t,0,8),Ne(n,e+tt(n)+1,t))};Q.toExponential=function(e,t){var n,r=this,a=r.constructor;return e===void 0?n=Ao(r,!0):(vr(e,0,Es),t===void 0?t=a.rounding:vr(t,0,8),r=Ne(new a(r),e+1,t),n=Ao(r,!0,e+1)),n};Q.toFixed=function(e,t){var n,r,a=this,o=a.constructor;return e===void 0?Ao(a):(vr(e,0,Es),t===void 0?t=o.rounding:vr(t,0,8),r=Ne(new o(a),e+tt(a)+1,t),n=Ao(r.abs(),!1,e+tt(r)+1),a.isneg()&&!a.isZero()?"-"+n:n)};Q.toInteger=Q.toint=function(){var e=this,t=e.constructor;return Ne(new t(e),tt(e)+1,t.rounding)};Q.toNumber=function(){return+this};Q.toPower=Q.pow=function(e){var t,n,r,a,o,i,s=this,u=s.constructor,l=12,p=+(e=new u(e));if(!e.s)return new u(en);if(s=new u(s),!s.s){if(e.s<1)throw Error(bn+"Infinity");return s}if(s.eq(en))return s;if(r=u.precision,e.eq(en))return Ne(s,r);if(t=e.e,n=e.d.length-1,i=t>=n,o=s.s,i){if((n=p<0?-p:p)<=gb){for(a=new u(en),t=Math.ceil(r/De+4),Ge=!1;n%2&&(a=a.times(s),v6(a.d,t)),n=Ns(n/2),n!==0;)s=s.times(s),v6(s.d,t);return Ge=!0,e.s<0?new u(en).div(a):Ne(a,r)}}else if(o<0)throw Error(bn+"NaN");return o=o<0&&e.d[Math.max(t,n)]&1?-1:1,s.s=1,Ge=!1,a=e.times(Zu(s,r+l)),Ge=!0,a=xb(a),a.s=o,a};Q.toPrecision=function(e,t){var n,r,a=this,o=a.constructor;return e===void 0?(n=tt(a),r=Ao(a,n<=o.toExpNeg||n>=o.toExpPos)):(vr(e,1,Es),t===void 0?t=o.rounding:vr(t,0,8),a=Ne(new o(a),e,t),n=tt(a),r=Ao(a,e<=n||n<=o.toExpNeg,e)),r};Q.toSignificantDigits=Q.tosd=function(e,t){var n=this,r=n.constructor;return e===void 0?(e=r.precision,t=r.rounding):(vr(e,1,Es),t===void 0?t=r.rounding:vr(t,0,8)),Ne(new r(n),e,t)};Q.toString=Q.valueOf=Q.val=Q.toJSON=Q[Symbol.for("nodejs.util.inspect.custom")]=function(){var e=this,t=tt(e),n=e.constructor;return Ao(e,t<=n.toExpNeg||t>=n.toExpPos)};function _b(e,t){var n,r,a,o,i,s,u,l,p=e.constructor,c=p.precision;if(!e.s||!t.s)return t.s||(t=new p(e)),Ge?Ne(t,c):t;if(u=e.d,l=t.d,i=e.e,a=t.e,u=u.slice(),o=i-a,o){for(o<0?(r=u,o=-o,s=l.length):(r=l,a=i,s=u.length),i=Math.ceil(c/De),s=i>s?i+1:s+1,o>s&&(o=s,r.length=1),r.reverse();o--;)r.push(0);r.reverse()}for(s=u.length,o=l.length,s-o<0&&(o=s,r=l,l=u,u=r),n=0;o;)n=(u[--o]=u[o]+l[o]+n)/ct|0,u[o]%=ct;for(n&&(u.unshift(n),++a),s=u.length;u[--s]==0;)u.pop();return t.d=u,t.e=a,Ge?Ne(t,c):t}function vr(e,t,n){if(e!==~~e||en)throw Error(vo+e)}function or(e){var t,n,r,a=e.length-1,o="",i=e[0];if(a>0){for(o+=i,t=1;ti?1:-1;else for(s=u=0;sa[s]?1:-1;break}return u}function n(r,a,o){for(var i=0;o--;)r[o]-=i,i=r[o]1;)r.shift()}return function(r,a,o,i){var s,u,l,p,c,m,d,g,f,y,v,h,_,w,x,S,O,k,C=r.constructor,N=r.s==a.s?1:-1,T=r.d,A=a.d;if(!r.s)return new C(r);if(!a.s)throw Error(bn+"Division by zero");for(u=r.e-a.e,O=A.length,x=T.length,d=new C(N),g=d.d=[],l=0;A[l]==(T[l]||0);)++l;if(A[l]>(T[l]||0)&&--u,o==null?h=o=C.precision:i?h=o+(tt(r)-tt(a))+1:h=o,h<0)return new C(0);if(h=h/De+2|0,l=0,O==1)for(p=0,A=A[0],h++;(l1&&(A=e(A,p),T=e(T,p),O=A.length,x=T.length),w=O,f=T.slice(0,O),y=f.length;y=ct/2&&++S;do p=0,s=t(A,f,O,y),s<0?(v=f[0],O!=y&&(v=v*ct+(f[1]||0)),p=v/S|0,p>1?(p>=ct&&(p=ct-1),c=e(A,p),m=c.length,y=f.length,s=t(c,f,m,y),s==1&&(p--,n(c,O16)throw Error(Y9+tt(e));if(!e.s)return new p(en);for(Ge=!1,s=c,i=new p(.03125);e.abs().gte(.1);)e=e.times(i),l+=5;for(r=Math.log(Ya(2,l))/Math.LN10*2+5|0,s+=r,n=a=o=new p(en),p.precision=s;;){if(a=Ne(a.times(e),s),n=n.times(++u),i=o.plus(jr(a,n,s)),or(i.d).slice(0,s)===or(o.d).slice(0,s)){for(;l--;)o=Ne(o.times(o),s);return p.precision=c,t==null?(Ge=!0,Ne(o,c)):o}o=i}}function tt(e){for(var t=e.e*De,n=e.d[0];n>=10;n/=10)t++;return t}function Jm(e,t,n){if(t>e.LN10.sd())throw Ge=!0,n&&(e.precision=n),Error(bn+"LN10 precision limit exceeded");return Ne(new e(e.LN10),t)}function na(e){for(var t="";e--;)t+="0";return t}function Zu(e,t){var n,r,a,o,i,s,u,l,p,c=1,m=10,d=e,g=d.d,f=d.constructor,y=f.precision;if(d.s<1)throw Error(bn+(d.s?"NaN":"-Infinity"));if(d.eq(en))return new f(0);if(t==null?(Ge=!1,l=y):l=t,d.eq(10))return t==null&&(Ge=!0),Jm(f,l);if(l+=m,f.precision=l,n=or(g),r=n.charAt(0),o=tt(d),Math.abs(o)<15e14){for(;r<7&&r!=1||r==1&&n.charAt(1)>3;)d=d.times(e),n=or(d.d),r=n.charAt(0),c++;o=tt(d),r>1?(d=new f("0."+n),o++):d=new f(r+"."+n.slice(1))}else return u=Jm(f,l+2,y).times(o+""),d=Zu(new f(r+"."+n.slice(1)),l-m).plus(u),f.precision=y,t==null?(Ge=!0,Ne(d,y)):d;for(s=i=d=jr(d.minus(en),d.plus(en),l),p=Ne(d.times(d),l),a=3;;){if(i=Ne(i.times(p),l),u=s.plus(jr(i,new f(a),l)),or(u.d).slice(0,l)===or(s.d).slice(0,l))return s=s.times(2),o!==0&&(s=s.plus(Jm(f,l+2,y).times(o+""))),s=jr(s,new f(c),l),f.precision=y,t==null?(Ge=!0,Ne(s,y)):s;s=u,a+=2}}function f6(e,t){var n,r,a;for((n=t.indexOf("."))>-1&&(t=t.replace(".","")),(r=t.search(/e/i))>0?(n<0&&(n=r),n+=+t.slice(r+1),t=t.substring(0,r)):n<0&&(n=t.length),r=0;t.charCodeAt(r)===48;)++r;for(a=t.length;t.charCodeAt(a-1)===48;)--a;if(t=t.slice(r,a),t){if(a-=r,n=n-r-1,e.e=Ns(n/De),e.d=[],r=(n+1)%De,n<0&&(r+=De),rQp||e.e<-Qp))throw Error(Y9+n)}else e.s=0,e.e=0,e.d=[0];return e}function Ne(e,t,n){var r,a,o,i,s,u,l,p,c=e.d;for(i=1,o=c[0];o>=10;o/=10)i++;if(r=t-i,r<0)r+=De,a=t,l=c[p=0];else{if(p=Math.ceil((r+1)/De),o=c.length,p>=o)return e;for(l=o=c[p],i=1;o>=10;o/=10)i++;r%=De,a=r-De+i}if(n!==void 0&&(o=Ya(10,i-a-1),s=l/o%10|0,u=t<0||c[p+1]!==void 0||l%o,u=n<4?(s||u)&&(n==0||n==(e.s<0?3:2)):s>5||s==5&&(n==4||u||n==6&&(r>0?a>0?l/Ya(10,i-a):0:c[p-1])%10&1||n==(e.s<0?8:7))),t<1||!c[0])return u?(o=tt(e),c.length=1,t=t-o-1,c[0]=Ya(10,(De-t%De)%De),e.e=Ns(-t/De)||0):(c.length=1,c[0]=e.e=e.s=0),e;if(r==0?(c.length=p,o=1,p--):(c.length=p+1,o=Ya(10,De-r),c[p]=a>0?(l/Ya(10,i-a)%Ya(10,a)|0)*o:0),u)for(;;)if(p==0){(c[0]+=o)==ct&&(c[0]=1,++e.e);break}else{if(c[p]+=o,c[p]!=ct)break;c[p--]=0,o=1}for(r=c.length;c[--r]===0;)c.pop();if(Ge&&(e.e>Qp||e.e<-Qp))throw Error(Y9+tt(e));return e}function wb(e,t){var n,r,a,o,i,s,u,l,p,c,m=e.constructor,d=m.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new m(e),Ge?Ne(t,d):t;if(u=e.d,c=t.d,r=t.e,l=e.e,u=u.slice(),i=l-r,i){for(p=i<0,p?(n=u,i=-i,s=c.length):(n=c,r=l,s=u.length),a=Math.max(Math.ceil(d/De),s)+2,i>a&&(i=a,n.length=1),n.reverse(),a=i;a--;)n.push(0);n.reverse()}else{for(a=u.length,s=c.length,p=a0;--a)u[s++]=0;for(a=c.length;a>i;){if(u[--a]0?o=o.charAt(0)+"."+o.slice(1)+na(r):i>1&&(o=o.charAt(0)+"."+o.slice(1)),o=o+(a<0?"e":"e+")+a):a<0?(o="0."+na(-a-1)+o,n&&(r=n-i)>0&&(o+=na(r))):a>=i?(o+=na(a+1-i),n&&(r=n-a-1)>0&&(o=o+"."+na(r))):((r=a+1)0&&(a+1===i&&(o+="."),o+=na(r))),e.s<0?"-"+o:o}function v6(e,t){if(e.length>t)return e.length=t,!0}function bb(e){var t,n,r;function a(o){var i=this;if(!(i instanceof a))return new a(o);if(i.constructor=a,o instanceof a){i.s=o.s,i.e=o.e,i.d=(o=o.d)?o.slice():o;return}if(typeof o=="number"){if(o*0!==0)throw Error(vo+o);if(o>0)i.s=1;else if(o<0)o=-o,i.s=-1;else{i.s=0,i.e=0,i.d=[0];return}if(o===~~o&&o<1e7){i.e=0,i.d=[o];return}return f6(i,o.toString())}else if(typeof o!="string")throw Error(vo+o);if(o.charCodeAt(0)===45?(o=o.slice(1),i.s=-1):i.s=1,HX.test(o))f6(i,o);else throw Error(vo+o)}if(a.prototype=Q,a.ROUND_UP=0,a.ROUND_DOWN=1,a.ROUND_CEIL=2,a.ROUND_FLOOR=3,a.ROUND_HALF_UP=4,a.ROUND_HALF_DOWN=5,a.ROUND_HALF_EVEN=6,a.ROUND_HALF_CEIL=7,a.ROUND_HALF_FLOOR=8,a.clone=bb,a.config=a.set=GX,e===void 0&&(e={}),e)for(r=["precision","rounding","toExpNeg","toExpPos","LN10"],t=0;t=a[t+1]&&r<=a[t+2])this[n]=r;else throw Error(vo+n+": "+r);if((r=e[n="LN10"])!==void 0)if(r==Math.LN10)this[n]=new this(r);else throw Error(vo+n+": "+r);return this}var Q9=bb(LX);en=new Q9(1);const Ce=Q9;function BX(e){return WX(e)||UX(e)||zX(e)||FX()}function FX(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function zX(e,t){if(e){if(typeof e=="string")return V3(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return V3(e,t)}}function UX(e){if(typeof Symbol<"u"&&Symbol.iterator in Object(e))return Array.from(e)}function WX(e){if(Array.isArray(e))return V3(e)}function V3(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=t?n.apply(void 0,a):e(t-i,h6(function(){for(var s=arguments.length,u=new Array(s),l=0;le.length)&&(t=e.length);for(var n=0,r=new Array(t);n"u"||!(Symbol.iterator in Object(e)))){var n=[],r=!0,a=!1,o=void 0;try{for(var i=e[Symbol.iterator](),s;!(r=(s=i.next()).done)&&(n.push(s.value),!(t&&n.length===t));r=!0);}catch(u){a=!0,o=u}finally{try{!r&&i.return!=null&&i.return()}finally{if(a)throw o}}return n}}function sY(e){if(Array.isArray(e))return e}function Cb(e){var t=Ju(e,2),n=t[0],r=t[1],a=n,o=r;return n>r&&(a=r,o=n),[a,o]}function Ab(e,t,n){if(e.lte(0))return new Ce(0);var r=T1.getDigitCount(e.toNumber()),a=new Ce(10).pow(r),o=e.div(a),i=r!==1?.05:.1,s=new Ce(Math.ceil(o.div(i).toNumber())).add(n).mul(i),u=s.mul(a);return t?u:new Ce(Math.ceil(u))}function uY(e,t,n){var r=1,a=new Ce(e);if(!a.isint()&&n){var o=Math.abs(e);o<1?(r=new Ce(10).pow(T1.getDigitCount(e)-1),a=new Ce(Math.floor(a.div(r).toNumber())).mul(r)):o>1&&(a=new Ce(Math.floor(e)))}else e===0?a=new Ce(Math.floor((t-1)/2)):n||(a=new Ce(Math.floor(e)));var i=Math.floor((t-1)/2),s=YX(XX(function(u){return a.add(new Ce(u-i).mul(r)).toNumber()}),K3);return s(0,t)}function Eb(e,t,n,r){var a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;if(!Number.isFinite((t-e)/(n-1)))return{step:new Ce(0),tickMin:new Ce(0),tickMax:new Ce(0)};var o=Ab(new Ce(t).sub(e).div(n-1),r,a),i;e<=0&&t>=0?i=new Ce(0):(i=new Ce(e).add(t).div(2),i=i.sub(new Ce(i).mod(o)));var s=Math.ceil(i.sub(e).div(o).toNumber()),u=Math.ceil(new Ce(t).sub(i).div(o).toNumber()),l=s+u+1;return l>n?Eb(e,t,n,r,a+1):(l0?u+(n-l):u,s=t>0?s:s+(n-l)),{step:o,tickMin:i.sub(new Ce(s).mul(o)),tickMax:i.add(new Ce(u).mul(o))})}function lY(e){var t=Ju(e,2),n=t[0],r=t[1],a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,i=Math.max(a,2),s=Cb([n,r]),u=Ju(s,2),l=u[0],p=u[1];if(l===-1/0||p===1/0){var c=p===1/0?[l].concat(Y3(K3(0,a-1).map(function(){return 1/0}))):[].concat(Y3(K3(0,a-1).map(function(){return-1/0})),[p]);return n>r?X3(c):c}if(l===p)return uY(l,a,o);var m=Eb(l,p,i,o),d=m.step,g=m.tickMin,f=m.tickMax,y=T1.rangeStep(g,f.add(new Ce(.1).mul(d)),d);return n>r?X3(y):y}function cY(e,t){var n=Ju(e,2),r=n[0],a=n[1],o=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,i=Cb([r,a]),s=Ju(i,2),u=s[0],l=s[1];if(u===-1/0||l===1/0)return[r,a];if(u===l)return[u];var p=Math.max(t,2),c=Ab(new Ce(l).sub(u).div(p-1),o,0),m=[].concat(Y3(T1.rangeStep(new Ce(u),new Ce(l).sub(new Ce(.99).mul(c)),c)),[l]);return r>a?X3(m):m}var pY=Ob(lY),mY=Ob(cY),dY="Invariant failed";function Eo(e,t){throw new Error(dY)}var fY=["offset","layout","width","dataKey","data","dataPointFormatter","xAxis","yAxis"];function Ui(e){"@babel/helpers - typeof";return Ui=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ui(e)}function Zp(){return Zp=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function wY(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function bY(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function SY(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:[],a=arguments.length>2?arguments[2]:void 0,o=arguments.length>3?arguments[3]:void 0,i=-1,s=(n=r==null?void 0:r.length)!==null&&n!==void 0?n:0;if(s<=1)return 0;if(o&&o.axisType==="angleAxis"&&Math.abs(Math.abs(o.range[1]-o.range[0])-360)<=1e-6)for(var u=o.range,l=0;l0?a[l-1].coordinate:a[s-1].coordinate,c=a[l].coordinate,m=l>=s-1?a[0].coordinate:a[l+1].coordinate,d=void 0;if(In(c-p)!==In(m-c)){var g=[];if(In(m-c)===In(u[1]-u[0])){d=m;var f=c+u[1]-u[0];g[0]=Math.min(f,(f+p)/2),g[1]=Math.max(f,(f+p)/2)}else{d=p;var y=m+u[1]-u[0];g[0]=Math.min(c,(y+c)/2),g[1]=Math.max(c,(y+c)/2)}var v=[Math.min(c,(d+c)/2),Math.max(c,(d+c)/2)];if(t>v[0]&&t<=v[1]||t>=g[0]&&t<=g[1]){i=a[l].index;break}}else{var h=Math.min(p,m),_=Math.max(p,m);if(t>(h+c)/2&&t<=(_+c)/2){i=a[l].index;break}}}else for(var w=0;w0&&w(r[w].coordinate+r[w-1].coordinate)/2&&t<=(r[w].coordinate+r[w+1].coordinate)/2||w===s-1&&t>(r[w].coordinate+r[w-1].coordinate)/2){i=r[w].index;break}return i},Z9=function(t){var n,r=t,a=r.type.displayName,o=(n=t.type)!==null&&n!==void 0&&n.defaultProps?Ve(Ve({},t.type.defaultProps),t.props):t.props,i=o.stroke,s=o.fill,u;switch(a){case"Line":u=i;break;case"Area":case"Radar":u=i&&i!=="none"?i:s;break;default:u=s;break}return u},HY=function(t){var n=t.barSize,r=t.totalSize,a=t.stackGroups,o=a===void 0?{}:a;if(!o)return{};for(var i={},s=Object.keys(o),u=0,l=s.length;u=0});if(v&&v.length){var h=v[0].type.defaultProps,_=h!==void 0?Ve(Ve({},h),v[0].props):v[0].props,w=_.barSize,x=_[y];i[x]||(i[x]=[]);var S=ne(w)?n:w;i[x].push({item:v[0],stackList:v.slice(1),barSize:ne(S)?void 0:ko(S,r,0)})}}return i},GY=function(t){var n=t.barGap,r=t.barCategoryGap,a=t.bandSize,o=t.sizeList,i=o===void 0?[]:o,s=t.maxBarSize,u=i.length;if(u<1)return null;var l=ko(n,a,0,!0),p,c=[];if(i[0].barSize===+i[0].barSize){var m=!1,d=a/u,g=i.reduce(function(w,x){return w+x.barSize||0},0);g+=(u-1)*l,g>=a&&(g-=(u-1)*l,l=0),g>=a&&d>0&&(m=!0,d*=.9,g=u*d);var f=(a-g)/2>>0,y={offset:f-l,size:0};p=i.reduce(function(w,x){var S={item:x.item,position:{offset:y.offset+y.size+l,size:m?d:x.barSize}},O=[].concat(_6(w),[S]);return y=O[O.length-1].position,x.stackList&&x.stackList.length&&x.stackList.forEach(function(k){O.push({item:k,position:y})}),O},c)}else{var v=ko(r,a,0,!0);a-2*v-(u-1)*l<=0&&(l=0);var h=(a-2*v-(u-1)*l)/u;h>1&&(h>>=0);var _=s===+s?Math.min(h,s):h;p=i.reduce(function(w,x,S){var O=[].concat(_6(w),[{item:x.item,position:{offset:v+(h+l)*S+(h-_)/2,size:_}}]);return x.stackList&&x.stackList.length&&x.stackList.forEach(function(k){O.push({item:k,position:O[O.length-1].position})}),O},c)}return p},BY=function(t,n,r,a){var o=r.children,i=r.width,s=r.margin,u=i-(s.left||0)-(s.right||0),l=Rb({children:o,legendWidth:u});if(l){var p=a||{},c=p.width,m=p.height,d=l.align,g=l.verticalAlign,f=l.layout;if((f==="vertical"||f==="horizontal"&&g==="middle")&&d!=="center"&&V(t[d]))return Ve(Ve({},t),{},_i({},d,t[d]+(c||0)));if((f==="horizontal"||f==="vertical"&&d==="center")&&g!=="middle"&&V(t[g]))return Ve(Ve({},t),{},_i({},g,t[g]+(m||0)))}return t},FY=function(t,n,r){return ne(n)?!0:t==="horizontal"?n==="yAxis":t==="vertical"||r==="x"?n==="xAxis":r==="y"?n==="yAxis":!0},$b=function(t,n,r,a,o){var i=n.props.children,s=Wt(i,Ts).filter(function(l){return FY(a,o,l.props.direction)});if(s&&s.length){var u=s.map(function(l){return l.props.dataKey});return t.reduce(function(l,p){var c=st(p,r);if(ne(c))return l;var m=Array.isArray(c)?[E1(c),fa(c)]:[c,c],d=u.reduce(function(g,f){var y=st(p,f,0),v=m[0]-Math.abs(Array.isArray(y)?y[0]:y),h=m[1]+Math.abs(Array.isArray(y)?y[1]:y);return[Math.min(v,g[0]),Math.max(h,g[1])]},[1/0,-1/0]);return[Math.min(d[0],l[0]),Math.max(d[1],l[1])]},[1/0,-1/0])}return null},zY=function(t,n,r,a,o){var i=n.map(function(s){return $b(t,s,r,o,a)}).filter(function(s){return!ne(s)});return i&&i.length?i.reduce(function(s,u){return[Math.min(s[0],u[0]),Math.max(s[1],u[1])]},[1/0,-1/0]):null},Mb=function(t,n,r,a,o){var i=n.map(function(u){var l=u.props.dataKey;return r==="number"&&l&&$b(t,u,l,a)||hu(t,l,r,o)});if(r==="number")return i.reduce(function(u,l){return[Math.min(u[0],l[0]),Math.max(u[1],l[1])]},[1/0,-1/0]);var s={};return i.reduce(function(u,l){for(var p=0,c=l.length;p=2?In(s[0]-s[1])*2*l:l,n&&(t.ticks||t.niceTicks)){var p=(t.ticks||t.niceTicks).map(function(c){var m=o?o.indexOf(c):c;return{coordinate:a(m)+l,value:c,offset:l}});return p.filter(function(c){return!Ps(c.coordinate)})}return t.isCategorical&&t.categoricalDomain?t.categoricalDomain.map(function(c,m){return{coordinate:a(c)+l,value:c,index:m,offset:l}}):a.ticks&&!r?a.ticks(t.tickCount).map(function(c){return{coordinate:a(c)+l,value:c,offset:l}}):a.domain().map(function(c,m){return{coordinate:a(c)+l,value:o?o[c]:c,index:m,offset:l}})},ed=new WeakMap,xc=function(t,n){if(typeof n!="function")return t;ed.has(t)||ed.set(t,new WeakMap);var r=ed.get(t);if(r.has(n))return r.get(n);var a=function(){t.apply(void 0,arguments),n.apply(void 0,arguments)};return r.set(n,a),a},UY=function(t,n,r){var a=t.scale,o=t.type,i=t.layout,s=t.axisType;if(a==="auto")return i==="radial"&&s==="radiusAxis"?{scale:Vu(),realScaleType:"band"}:i==="radial"&&s==="angleAxis"?{scale:Vp(),realScaleType:"linear"}:o==="category"&&n&&(n.indexOf("LineChart")>=0||n.indexOf("AreaChart")>=0||n.indexOf("ComposedChart")>=0&&!r)?{scale:vu(),realScaleType:"point"}:o==="category"?{scale:Vu(),realScaleType:"band"}:{scale:Vp(),realScaleType:"linear"};if(Oo(a)){var u="scale".concat(v1(a));return{scale:(d6[u]||vu)(),realScaleType:d6[u]?u:"point"}}return oe(a)?{scale:a}:{scale:vu(),realScaleType:"point"}},w6=1e-4,WY=function(t){var n=t.domain();if(!(!n||n.length<=2)){var r=n.length,a=t.range(),o=Math.min(a[0],a[1])-w6,i=Math.max(a[0],a[1])+w6,s=t(n[0]),u=t(n[r-1]);(si||ui)&&t.domain([n[0],n[r-1]])}},VY=function(t,n){if(!t)return null;for(var r=0,a=t.length;ra)&&(o[1]=a),o[0]>a&&(o[0]=a),o[1]=0?(t[s][r][0]=o,t[s][r][1]=o+u,o=t[s][r][1]):(t[s][r][0]=i,t[s][r][1]=i+u,i=t[s][r][1])}},YY=function(t){var n=t.length;if(!(n<=0))for(var r=0,a=t[0].length;r=0?(t[i][r][0]=o,t[i][r][1]=o+s,o=t[i][r][1]):(t[i][r][0]=0,t[i][r][1]=0)}},QY={sign:XY,expand:pI,none:Ii,silhouette:mI,wiggle:dI,positive:YY},ZY=function(t,n,r){var a=n.map(function(s){return s.props.dataKey}),o=QY[r],i=cI().keys(a).value(function(s,u){return+st(s,u,0)}).order(P3).offset(o);return i(t)},JY=function(t,n,r,a,o,i){if(!t)return null;var s=i?n.reverse():n,u={},l=s.reduce(function(c,m){var d,g=(d=m.type)!==null&&d!==void 0&&d.defaultProps?Ve(Ve({},m.type.defaultProps),m.props):m.props,f=g.stackId,y=g.hide;if(y)return c;var v=g[r],h=c[v]||{hasStack:!1,stackGroups:{}};if(it(f)){var _=h.stackGroups[f]||{numericAxisId:r,cateAxisId:a,items:[]};_.items.push(m),h.hasStack=!0,h.stackGroups[f]=_}else h.stackGroups[$o("_stackId_")]={numericAxisId:r,cateAxisId:a,items:[m]};return Ve(Ve({},c),{},_i({},v,h))},u),p={};return Object.keys(l).reduce(function(c,m){var d=l[m];if(d.hasStack){var g={};d.stackGroups=Object.keys(d.stackGroups).reduce(function(f,y){var v=d.stackGroups[y];return Ve(Ve({},f),{},_i({},y,{numericAxisId:r,cateAxisId:a,items:v.items,stackedData:ZY(t,v.items,o)}))},g)}return Ve(Ve({},c),{},_i({},m,d))},p)},eQ=function(t,n){var r=n.realScaleType,a=n.type,o=n.tickCount,i=n.originalDomain,s=n.allowDecimals,u=r||n.scale;if(u!=="auto"&&u!=="linear")return null;if(o&&a==="number"&&i&&(i[0]==="auto"||i[1]==="auto")){var l=t.domain();if(!l.length)return null;var p=pY(l,o,s);return t.domain([E1(p),fa(p)]),{niceTicks:p}}if(o&&a==="number"){var c=t.domain(),m=mY(c,o,s);return{niceTicks:m}}return null};function Wi(e){var t=e.axis,n=e.ticks,r=e.bandSize,a=e.entry,o=e.index,i=e.dataKey;if(t.type==="category"){if(!t.allowDuplicatedCategory&&t.dataKey&&!ne(a[t.dataKey])){var s=Pp(n,"value",a[t.dataKey]);if(s)return s.coordinate+r/2}return n[o]?n[o].coordinate+r/2:null}var u=st(a,ne(i)?t.dataKey:i);return ne(u)?null:t.scale(u)}var b6=function(t){var n=t.axis,r=t.ticks,a=t.offset,o=t.bandSize,i=t.entry,s=t.index;if(n.type==="category")return r[s]?r[s].coordinate+a:null;var u=st(i,n.dataKey,n.domain[s]);return ne(u)?null:n.scale(u)-o/2+a},tQ=function(t){var n=t.numericAxis,r=n.scale.domain();if(n.type==="number"){var a=Math.min(r[0],r[1]),o=Math.max(r[0],r[1]);return a<=0&&o>=0?0:o<0?o:a}return r[0]},nQ=function(t,n){var r,a=(r=t.type)!==null&&r!==void 0&&r.defaultProps?Ve(Ve({},t.type.defaultProps),t.props):t.props,o=a.stackId;if(it(o)){var i=n[o];if(i){var s=i.items.indexOf(t);return s>=0?i.stackedData[s]:null}}return null},rQ=function(t){return t.reduce(function(n,r){return[E1(r.concat([n[0]]).filter(V)),fa(r.concat([n[1]]).filter(V))]},[1/0,-1/0])},Db=function(t,n,r){return Object.keys(t).reduce(function(a,o){var i=t[o],s=i.stackedData,u=s.reduce(function(l,p){var c=rQ(p.slice(n,r+1));return[Math.min(l[0],c[0]),Math.max(l[1],c[1])]},[1/0,-1/0]);return[Math.min(u[0],a[0]),Math.max(u[1],a[1])]},[1/0,-1/0]).map(function(a){return a===1/0||a===-1/0?0:a})},S6=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,P6=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,ef=function(t,n,r){if(oe(t))return t(n,r);if(!Array.isArray(t))return n;var a=[];if(V(t[0]))a[0]=r?t[0]:Math.min(t[0],n[0]);else if(S6.test(t[0])){var o=+S6.exec(t[0])[1];a[0]=n[0]-o}else oe(t[0])?a[0]=t[0](n[0]):a[0]=n[0];if(V(t[1]))a[1]=r?t[1]:Math.max(t[1],n[1]);else if(P6.test(t[1])){var i=+P6.exec(t[1])[1];a[1]=n[1]+i}else oe(t[1])?a[1]=t[1](n[1]):a[1]=n[1];return a},e0=function(t,n,r){if(t&&t.scale&&t.scale.bandwidth){var a=t.scale.bandwidth();if(!r||a>0)return a}if(t&&n&&n.length>=2){for(var o=O9(n,function(c){return c.coordinate}),i=1/0,s=1,u=o.length;si&&(l=2*Math.PI-l),{radius:s,angle:sQ(l),angleInRadian:l}},cQ=function(t){var n=t.startAngle,r=t.endAngle,a=Math.floor(n/360),o=Math.floor(r/360),i=Math.min(a,o);return{startAngle:n-i*360,endAngle:r-i*360}},pQ=function(t,n){var r=n.startAngle,a=n.endAngle,o=Math.floor(r/360),i=Math.floor(a/360),s=Math.min(o,i);return t+s*360},A6=function(t,n){var r=t.x,a=t.y,o=lQ({x:r,y:a},n),i=o.radius,s=o.angle,u=n.innerRadius,l=n.outerRadius;if(il)return!1;if(i===0)return!0;var p=cQ(n),c=p.startAngle,m=p.endAngle,d=s,g;if(c<=m){for(;d>m;)d-=360;for(;d=c&&d<=m}else{for(;d>c;)d-=360;for(;d=m&&d<=c}return g?C6(C6({},n),{},{radius:i,angle:pQ(d,n)}):null};function rl(e){"@babel/helpers - typeof";return rl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},rl(e)}var mQ=["offset"];function dQ(e){return yQ(e)||hQ(e)||vQ(e)||fQ()}function fQ(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function vQ(e,t){if(e){if(typeof e=="string")return tf(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return tf(e,t)}}function hQ(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function yQ(e){if(Array.isArray(e))return tf(e)}function tf(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _Q(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function E6(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function rt(e){for(var t=1;t=0?1:-1,_,w;a==="insideStart"?(_=d+h*i,w=f):a==="insideEnd"?(_=g-h*i,w=!f):a==="end"&&(_=g+h*i,w=f),w=v<=0?w:!w;var x=yt(l,p,y,_),S=yt(l,p,y,_+(w?1:-1)*359),O="M".concat(x.x,",").concat(x.y,` - A`).concat(y,",").concat(y,",0,1,").concat(w?0:1,`, - `).concat(S.x,",").concat(S.y),k=ne(t.id)?$o("recharts-radial-line-"):t.id;return E.createElement("text",al({},r,{dominantBaseline:"central",className:le("recharts-radial-bar-label",s)}),E.createElement("defs",null,E.createElement("path",{id:k,d:O})),E.createElement("textPath",{xlinkHref:"#".concat(k)},n))},kQ=function(t){var n=t.viewBox,r=t.offset,a=t.position,o=n,i=o.cx,s=o.cy,u=o.innerRadius,l=o.outerRadius,p=o.startAngle,c=o.endAngle,m=(p+c)/2;if(a==="outside"){var d=yt(i,s,l+r,m),g=d.x,f=d.y;return{x:g,y:f,textAnchor:g>=i?"start":"end",verticalAnchor:"middle"}}if(a==="center")return{x:i,y:s,textAnchor:"middle",verticalAnchor:"middle"};if(a==="centerTop")return{x:i,y:s,textAnchor:"middle",verticalAnchor:"start"};if(a==="centerBottom")return{x:i,y:s,textAnchor:"middle",verticalAnchor:"end"};var y=(u+l)/2,v=yt(i,s,y,m),h=v.x,_=v.y;return{x:h,y:_,textAnchor:"middle",verticalAnchor:"middle"}},CQ=function(t){var n=t.viewBox,r=t.parentViewBox,a=t.offset,o=t.position,i=n,s=i.x,u=i.y,l=i.width,p=i.height,c=p>=0?1:-1,m=c*a,d=c>0?"end":"start",g=c>0?"start":"end",f=l>=0?1:-1,y=f*a,v=f>0?"end":"start",h=f>0?"start":"end";if(o==="top"){var _={x:s+l/2,y:u-c*a,textAnchor:"middle",verticalAnchor:d};return rt(rt({},_),r?{height:Math.max(u-r.y,0),width:l}:{})}if(o==="bottom"){var w={x:s+l/2,y:u+p+m,textAnchor:"middle",verticalAnchor:g};return rt(rt({},w),r?{height:Math.max(r.y+r.height-(u+p),0),width:l}:{})}if(o==="left"){var x={x:s-y,y:u+p/2,textAnchor:v,verticalAnchor:"middle"};return rt(rt({},x),r?{width:Math.max(x.x-r.x,0),height:p}:{})}if(o==="right"){var S={x:s+l+y,y:u+p/2,textAnchor:h,verticalAnchor:"middle"};return rt(rt({},S),r?{width:Math.max(r.x+r.width-S.x,0),height:p}:{})}var O=r?{width:l,height:p}:{};return o==="insideLeft"?rt({x:s+y,y:u+p/2,textAnchor:h,verticalAnchor:"middle"},O):o==="insideRight"?rt({x:s+l-y,y:u+p/2,textAnchor:v,verticalAnchor:"middle"},O):o==="insideTop"?rt({x:s+l/2,y:u+m,textAnchor:"middle",verticalAnchor:g},O):o==="insideBottom"?rt({x:s+l/2,y:u+p-m,textAnchor:"middle",verticalAnchor:d},O):o==="insideTopLeft"?rt({x:s+y,y:u+m,textAnchor:h,verticalAnchor:g},O):o==="insideTopRight"?rt({x:s+l-y,y:u+m,textAnchor:v,verticalAnchor:g},O):o==="insideBottomLeft"?rt({x:s+y,y:u+p-m,textAnchor:h,verticalAnchor:d},O):o==="insideBottomRight"?rt({x:s+l-y,y:u+p-m,textAnchor:v,verticalAnchor:d},O):xs(o)&&(V(o.x)||eo(o.x))&&(V(o.y)||eo(o.y))?rt({x:s+ko(o.x,l),y:u+ko(o.y,p),textAnchor:"end",verticalAnchor:"end"},O):rt({x:s+l/2,y:u+p/2,textAnchor:"middle",verticalAnchor:"middle"},O)},AQ=function(t){return"cx"in t&&V(t.cx)};function At(e){var t=e.offset,n=t===void 0?5:t,r=gQ(e,mQ),a=rt({offset:n},r),o=a.viewBox,i=a.position,s=a.value,u=a.children,l=a.content,p=a.className,c=p===void 0?"":p,m=a.textBreakAll;if(!o||ne(s)&&ne(u)&&!P.isValidElement(l)&&!oe(l))return null;if(P.isValidElement(l))return P.cloneElement(l,a);var d;if(oe(l)){if(d=P.createElement(l,a),P.isValidElement(d))return d}else d=SQ(a);var g=AQ(o),f=ae(a,!0);if(g&&(i==="insideStart"||i==="insideEnd"||i==="end"))return OQ(a,d,f);var y=g?kQ(a):CQ(a);return E.createElement(Lp,al({className:le("recharts-label",c)},f,y,{breakAll:m}),d)}At.displayName="Label";var Hb=function(t){var n=t.cx,r=t.cy,a=t.angle,o=t.startAngle,i=t.endAngle,s=t.r,u=t.radius,l=t.innerRadius,p=t.outerRadius,c=t.x,m=t.y,d=t.top,g=t.left,f=t.width,y=t.height,v=t.clockWise,h=t.labelViewBox;if(h)return h;if(V(f)&&V(y)){if(V(c)&&V(m))return{x:c,y:m,width:f,height:y};if(V(d)&&V(g))return{x:d,y:g,width:f,height:y}}return V(c)&&V(m)?{x:c,y:m,width:0,height:0}:V(n)&&V(r)?{cx:n,cy:r,startAngle:o||a||0,endAngle:i||a||0,innerRadius:l||0,outerRadius:p||u||s||0,clockWise:v}:t.viewBox?t.viewBox:{}},EQ=function(t,n){return t?t===!0?E.createElement(At,{key:"label-implicit",viewBox:n}):it(t)?E.createElement(At,{key:"label-implicit",viewBox:n,value:t}):P.isValidElement(t)?t.type===At?P.cloneElement(t,{key:"label-implicit",viewBox:n}):E.createElement(At,{key:"label-implicit",content:t,viewBox:n}):oe(t)?E.createElement(At,{key:"label-implicit",content:t,viewBox:n}):xs(t)?E.createElement(At,al({viewBox:n},t,{key:"label-implicit"})):null:null},NQ=function(t,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!t||!t.children&&r&&!t.label)return null;var a=t.children,o=Hb(t),i=Wt(a,At).map(function(u,l){return P.cloneElement(u,{viewBox:n||o,key:"label-".concat(l)})});if(!r)return i;var s=EQ(t.label,n||o);return[s].concat(dQ(i))};At.parseViewBox=Hb;At.renderCallByParent=NQ;function TQ(e){var t=e==null?0:e.length;return t?e[t-1]:void 0}var jQ=TQ;const RQ=Ae(jQ);function ol(e){"@babel/helpers - typeof";return ol=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ol(e)}var $Q=["valueAccessor"],MQ=["data","dataKey","clockWise","id","textBreakAll"];function qQ(e){return HQ(e)||LQ(e)||DQ(e)||IQ()}function IQ(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function DQ(e,t){if(e){if(typeof e=="string")return nf(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return nf(e,t)}}function LQ(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function HQ(e){if(Array.isArray(e))return nf(e)}function nf(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zQ(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var UQ=function(t){return Array.isArray(t.value)?RQ(t.value):t.value};function dr(e){var t=e.valueAccessor,n=t===void 0?UQ:t,r=j6(e,$Q),a=r.data,o=r.dataKey,i=r.clockWise,s=r.id,u=r.textBreakAll,l=j6(r,MQ);return!a||!a.length?null:E.createElement(ye,{className:"recharts-label-list"},a.map(function(p,c){var m=ne(o)?n(p,c):st(p&&p.payload,o),d=ne(s)?{}:{id:"".concat(s,"-").concat(c)};return E.createElement(At,n0({},ae(p,!0),l,d,{parentViewBox:p.parentViewBox,value:m,textBreakAll:u,viewBox:At.parseViewBox(ne(i)?p:T6(T6({},p),{},{clockWise:i})),key:"label-".concat(c),index:c}))}))}dr.displayName="LabelList";function WQ(e,t){return e?e===!0?E.createElement(dr,{key:"labelList-implicit",data:t}):E.isValidElement(e)||oe(e)?E.createElement(dr,{key:"labelList-implicit",data:t,content:e}):xs(e)?E.createElement(dr,n0({data:t},e,{key:"labelList-implicit"})):null:null}function VQ(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!e||!e.children&&n&&!e.label)return null;var r=e.children,a=Wt(r,dr).map(function(i,s){return P.cloneElement(i,{data:t,key:"labelList-".concat(s)})});if(!n)return a;var o=WQ(e.label,t);return[o].concat(qQ(a))}dr.renderCallByParent=VQ;function il(e){"@babel/helpers - typeof";return il=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},il(e)}function rf(){return rf=Object.assign?Object.assign.bind():function(e){for(var t=1;t180),",").concat(+(i>l),`, - `).concat(c.x,",").concat(c.y,` - `);if(a>0){var d=yt(n,r,a,i),g=yt(n,r,a,l);m+="L ".concat(g.x,",").concat(g.y,` + height and width.`,V,K,u,c,f,d,n);var J=!Array.isArray(_)&&sa(_.type).endsWith("Chart");return L.Children.map(_,function(z){return L.isValidElement(z)?R.cloneElement(z,Op({width:V,height:K},J?{style:Op({height:"100%",width:"100%",maxHeight:K,maxWidth:V},z.props.style)}:{})):z})},[n,_,c,v,d,f,j,u]);return L.createElement("div",{id:y?"".concat(y):void 0,className:Ie("recharts-responsive-container",b),style:Op(Op({},k),{},{width:u,height:c,minWidth:f,minHeight:d,maxHeight:v}),ref:P},M)}),g2=function(t){return null};g2.displayName="Cell";function fl(e){"@babel/helpers - typeof";return fl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},fl(e)}function bx(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function k5(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:{};if(t==null||uo.isSsr)return{width:0,height:0};var r=qH(n),a=JSON.stringify({text:t,copyStyle:r});if(Mi.widthCache[a])return Mi.widthCache[a];try{var i=document.getElementById(Sx);i||(i=document.createElement("span"),i.setAttribute("id",Sx),i.setAttribute("aria-hidden","true"),document.body.appendChild(i));var u=k5(k5({},NH),r);Object.assign(i.style,u),i.textContent="".concat(t);var l=i.getBoundingClientRect(),c={width:l.width,height:l.height};return Mi.widthCache[a]=c,++Mi.cacheCount>TH&&(Mi.cacheCount=0,Mi.widthCache={}),c}catch{return{width:0,height:0}}},jH=function(t){return{top:t.top+window.scrollY-document.documentElement.clientTop,left:t.left+window.scrollX-document.documentElement.clientLeft}};function vl(e){"@babel/helpers - typeof";return vl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},vl(e)}function a1(e,t){return $H(e)||DH(e,t)||IH(e,t)||MH()}function MH(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function IH(e,t){if(e){if(typeof e=="string")return Px(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Px(e,t)}}function Px(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function ZH(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function Rx(e,t){return nG(e)||tG(e,t)||eG(e,t)||JH()}function JH(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function eG(e,t){if(e){if(typeof e=="string")return Tx(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Tx(e,t)}}function Tx(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n0&&arguments[0]!==void 0?arguments[0]:[];return V.reduce(function(K,J){var z=J.word,Y=J.width,Q=K[K.length-1];if(Q&&(a==null||i||Q.width+Y+rJ.width?K:J})};if(!f)return _;for(var g="…",y=function(V){var K=d.slice(0,V),J=Ek({breakAll:m,style:c,children:K+g}).wordsWithComputedWidth,z=v(J),Y=z.length>u||w(z).width>Number(a);return[Y,z]},b=0,O=d.length-1,C=0,k;b<=O&&C<=d.length-1;){var P=Math.floor((b+O)/2),A=P-1,T=y(A),q=Rx(T,2),j=q[0],B=q[1],$=y(P),M=Rx($,1),H=M[0];if(!j&&!H&&(b=P+1),j&&H&&(O=P-1),!j&&H){k=B;break}C++}return k||_},Nx=function(t){var n=Re(t)?[]:t.toString().split(Ak);return[{words:n}]},aG=function(t){var n=t.width,r=t.scaleToFit,a=t.children,i=t.style,u=t.breakAll,l=t.maxLines;if((n||r)&&!uo.isSsr){var c,m,f=Ek({breakAll:u,children:a,style:i});if(f){var d=f.wordsWithComputedWidth,v=f.spaceWidth;c=d,m=v}else return Nx(a);return rG({breakAll:u,children:a,maxLines:l,style:i},c,m,n,r)}return Nx(a)},qx="#808080",o1=function(t){var n=t.x,r=n===void 0?0:n,a=t.y,i=a===void 0?0:a,u=t.lineHeight,l=u===void 0?"1em":u,c=t.capHeight,m=c===void 0?"0.71em":c,f=t.scaleToFit,d=f===void 0?!1:f,v=t.textAnchor,_=v===void 0?"start":v,w=t.verticalAnchor,g=w===void 0?"end":w,y=t.fill,b=y===void 0?qx:y,O=Ex(t,YH),C=R.useMemo(function(){return aG({breakAll:O.breakAll,children:O.children,maxLines:O.maxLines,scaleToFit:d,style:O.style,width:O.width})},[O.breakAll,O.children,O.maxLines,d,O.style,O.width]),k=O.dx,P=O.dy,A=O.angle,T=O.className,q=O.breakAll,j=Ex(O,QH);if(!Rt(r)||!Rt(i))return null;var B=r+(ce(k)?k:0),$=i+(ce(P)?P:0),M;switch(g){case"start":M=t9("calc(".concat(m,")"));break;case"middle":M=t9("calc(".concat((C.length-1)/2," * -").concat(l," + (").concat(m," / 2))"));break;default:M=t9("calc(".concat(C.length-1," * -").concat(l,")"));break}var H=[];if(d){var F=C[0].width,V=O.width;H.push("scale(".concat((ce(V)?V/F:1)/F,")"))}return A&&H.push("rotate(".concat(A,", ").concat(B,", ").concat($,")")),H.length&&(j.transform=H.join(" ")),L.createElement("text",C5({},Te(j,!0),{x:B,y:$,className:Ie("recharts-text",T),textAnchor:_,fill:b.includes("url")?qx:b}),C.map(function(K,J){var z=K.words.join(q?"":" ");return L.createElement("tspan",{x:B,dy:J===0?M:l,key:"".concat(z,"-").concat(J)},z)}))};function to(e,t){return e==null||t==null?NaN:et?1:e>=t?0:NaN}function oG(e,t){return e==null||t==null?NaN:te?1:t>=e?0:NaN}function x2(e){let t,n,r;e.length!==2?(t=to,n=(l,c)=>to(e(l),c),r=(l,c)=>e(l)-c):(t=e===to||e===oG?e:iG,n=e,r=e);function a(l,c,m=0,f=l.length){if(m>>1;n(l[d],c)<0?m=d+1:f=d}while(m>>1;n(l[d],c)<=0?m=d+1:f=d}while(mm&&r(l[d-1],c)>-r(l[d],c)?d-1:d}return{left:a,center:u,right:i}}function iG(){return 0}function Rk(e){return e===null?NaN:+e}function*sG(e,t){for(let n of e)n!=null&&(n=+n)>=n&&(yield n)}const uG=x2(to),ec=uG.right;x2(Rk).center;class jx extends Map{constructor(t,n=pG){if(super(),Object.defineProperties(this,{_intern:{value:new Map},_key:{value:n}}),t!=null)for(const[r,a]of t)this.set(r,a)}get(t){return super.get(Mx(this,t))}has(t){return super.has(Mx(this,t))}set(t,n){return super.set(lG(this,t),n)}delete(t){return super.delete(cG(this,t))}}function Mx({_intern:e,_key:t},n){const r=t(n);return e.has(r)?e.get(r):n}function lG({_intern:e,_key:t},n){const r=t(n);return e.has(r)?e.get(r):(e.set(r,n),n)}function cG({_intern:e,_key:t},n){const r=t(n);return e.has(r)&&(n=e.get(r),e.delete(r)),n}function pG(e){return e!==null&&typeof e=="object"?e.valueOf():e}function mG(e=to){if(e===to)return Tk;if(typeof e!="function")throw new TypeError("compare is not a function");return(t,n)=>{const r=e(t,n);return r||r===0?r:(e(n,n)===0)-(e(t,t)===0)}}function Tk(e,t){return(e==null||!(e>=e))-(t==null||!(t>=t))||(et?1:0)}const dG=Math.sqrt(50),fG=Math.sqrt(10),vG=Math.sqrt(2);function i1(e,t,n){const r=(t-e)/Math.max(0,n),a=Math.floor(Math.log10(r)),i=r/Math.pow(10,a),u=i>=dG?10:i>=fG?5:i>=vG?2:1;let l,c,m;return a<0?(m=Math.pow(10,-a)/u,l=Math.round(e*m),c=Math.round(t*m),l/mt&&--c,m=-m):(m=Math.pow(10,a)*u,l=Math.round(e/m),c=Math.round(t/m),l*mt&&--c),c0))return[];if(e===t)return[e];const r=t=a))return[];const l=i-a+1,c=new Array(l);if(r)if(u<0)for(let m=0;m=r)&&(n=r);return n}function Dx(e,t){let n;for(const r of e)r!=null&&(n>r||n===void 0&&r>=r)&&(n=r);return n}function Nk(e,t,n=0,r=1/0,a){if(t=Math.floor(t),n=Math.floor(Math.max(0,n)),r=Math.floor(Math.min(e.length-1,r)),!(n<=t&&t<=r))return e;for(a=a===void 0?Tk:mG(a);r>n;){if(r-n>600){const c=r-n+1,m=t-n+1,f=Math.log(c),d=.5*Math.exp(2*f/3),v=.5*Math.sqrt(f*d*(c-d)/c)*(m-c/2<0?-1:1),_=Math.max(n,Math.floor(t-m*d/c+v)),w=Math.min(r,Math.floor(t+(c-m)*d/c+v));Nk(e,t,_,w,a)}const i=e[t];let u=n,l=r;for(Hu(e,n,t),a(e[r],i)>0&&Hu(e,n,r);u0;)--l}a(e[n],i)===0?Hu(e,n,l):(++l,Hu(e,l,r)),l<=t&&(n=l+1),t<=l&&(r=l-1)}return e}function Hu(e,t,n){const r=e[t];e[t]=e[n],e[n]=r}function hG(e,t,n){if(e=Float64Array.from(sG(e)),!(!(r=e.length)||isNaN(t=+t))){if(t<=0||r<2)return Dx(e);if(t>=1)return Ix(e);var r,a=(r-1)*t,i=Math.floor(a),u=Ix(Nk(e,i).subarray(0,i+1)),l=Dx(e.subarray(i+1));return u+(l-u)*(a-i)}}function yG(e,t,n=Rk){if(!(!(r=e.length)||isNaN(t=+t))){if(t<=0||r<2)return+n(e[0],0,e);if(t>=1)return+n(e[r-1],r-1,e);var r,a=(r-1)*t,i=Math.floor(a),u=+n(e[i],i,e),l=+n(e[i+1],i+1,e);return u+(l-u)*(a-i)}}function _G(e,t,n){e=+e,t=+t,n=(a=arguments.length)<2?(t=e,e=0,1):a<3?1:+n;for(var r=-1,a=Math.max(0,Math.ceil((t-e)/n))|0,i=new Array(a);++r>8&15|t>>4&240,t>>4&15|t&240,(t&15)<<4|t&15,1):n===8?Cp(t>>24&255,t>>16&255,t>>8&255,(t&255)/255):n===4?Cp(t>>12&15|t>>8&240,t>>8&15|t>>4&240,t>>4&15|t&240,((t&15)<<4|t&15)/255):null):(t=xG.exec(e))?new gn(t[1],t[2],t[3],1):(t=wG.exec(e))?new gn(t[1]*255/100,t[2]*255/100,t[3]*255/100,1):(t=bG.exec(e))?Cp(t[1],t[2],t[3],t[4]):(t=SG.exec(e))?Cp(t[1]*255/100,t[2]*255/100,t[3]*255/100,t[4]):(t=PG.exec(e))?zx(t[1],t[2]/100,t[3]/100,1):(t=OG.exec(e))?zx(t[1],t[2]/100,t[3]/100,t[4]):$x.hasOwnProperty(e)?Gx($x[e]):e==="transparent"?new gn(NaN,NaN,NaN,0):null}function Gx(e){return new gn(e>>16&255,e>>8&255,e&255,1)}function Cp(e,t,n,r){return r<=0&&(e=t=n=NaN),new gn(e,t,n,r)}function AG(e){return e instanceof tc||(e=gl(e)),e?(e=e.rgb(),new gn(e.r,e.g,e.b,e.opacity)):new gn}function N5(e,t,n,r){return arguments.length===1?AG(e):new gn(e,t,n,r??1)}function gn(e,t,n,r){this.r=+e,this.g=+t,this.b=+n,this.opacity=+r}b2(gn,N5,jk(tc,{brighter(e){return e=e==null?s1:Math.pow(s1,e),new gn(this.r*e,this.g*e,this.b*e,this.opacity)},darker(e){return e=e==null?yl:Math.pow(yl,e),new gn(this.r*e,this.g*e,this.b*e,this.opacity)},rgb(){return this},clamp(){return new gn(Go(this.r),Go(this.g),Go(this.b),u1(this.opacity))},displayable(){return-.5<=this.r&&this.r<255.5&&-.5<=this.g&&this.g<255.5&&-.5<=this.b&&this.b<255.5&&0<=this.opacity&&this.opacity<=1},hex:Fx,formatHex:Fx,formatHex8:EG,formatRgb:Bx,toString:Bx}));function Fx(){return`#${To(this.r)}${To(this.g)}${To(this.b)}`}function EG(){return`#${To(this.r)}${To(this.g)}${To(this.b)}${To((isNaN(this.opacity)?1:this.opacity)*255)}`}function Bx(){const e=u1(this.opacity);return`${e===1?"rgb(":"rgba("}${Go(this.r)}, ${Go(this.g)}, ${Go(this.b)}${e===1?")":`, ${e})`}`}function u1(e){return isNaN(e)?1:Math.max(0,Math.min(1,e))}function Go(e){return Math.max(0,Math.min(255,Math.round(e)||0))}function To(e){return e=Go(e),(e<16?"0":"")+e.toString(16)}function zx(e,t,n,r){return r<=0?e=t=n=NaN:n<=0||n>=1?e=t=NaN:t<=0&&(e=NaN),new pr(e,t,n,r)}function Mk(e){if(e instanceof pr)return new pr(e.h,e.s,e.l,e.opacity);if(e instanceof tc||(e=gl(e)),!e)return new pr;if(e instanceof pr)return e;e=e.rgb();var t=e.r/255,n=e.g/255,r=e.b/255,a=Math.min(t,n,r),i=Math.max(t,n,r),u=NaN,l=i-a,c=(i+a)/2;return l?(t===i?u=(n-r)/l+(n0&&c<1?0:u,new pr(u,l,c,e.opacity)}function RG(e,t,n,r){return arguments.length===1?Mk(e):new pr(e,t,n,r??1)}function pr(e,t,n,r){this.h=+e,this.s=+t,this.l=+n,this.opacity=+r}b2(pr,RG,jk(tc,{brighter(e){return e=e==null?s1:Math.pow(s1,e),new pr(this.h,this.s,this.l*e,this.opacity)},darker(e){return e=e==null?yl:Math.pow(yl,e),new pr(this.h,this.s,this.l*e,this.opacity)},rgb(){var e=this.h%360+(this.h<0)*360,t=isNaN(e)||isNaN(this.s)?0:this.s,n=this.l,r=n+(n<.5?n:1-n)*t,a=2*n-r;return new gn(n9(e>=240?e-240:e+120,a,r),n9(e,a,r),n9(e<120?e+240:e-120,a,r),this.opacity)},clamp(){return new pr(Ux(this.h),Ap(this.s),Ap(this.l),u1(this.opacity))},displayable(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1},formatHsl(){const e=u1(this.opacity);return`${e===1?"hsl(":"hsla("}${Ux(this.h)}, ${Ap(this.s)*100}%, ${Ap(this.l)*100}%${e===1?")":`, ${e})`}`}}));function Ux(e){return e=(e||0)%360,e<0?e+360:e}function Ap(e){return Math.max(0,Math.min(1,e||0))}function n9(e,t,n){return(e<60?t+(n-t)*e/60:e<180?n:e<240?t+(n-t)*(240-e)/60:t)*255}const S2=e=>()=>e;function TG(e,t){return function(n){return e+n*t}}function NG(e,t,n){return e=Math.pow(e,n),t=Math.pow(t,n)-e,n=1/n,function(r){return Math.pow(e+r*t,n)}}function qG(e){return(e=+e)==1?Ik:function(t,n){return n-t?NG(t,n,e):S2(isNaN(t)?n:t)}}function Ik(e,t){var n=t-e;return n?TG(e,n):S2(isNaN(e)?t:e)}const Wx=(function e(t){var n=qG(t);function r(a,i){var u=n((a=N5(a)).r,(i=N5(i)).r),l=n(a.g,i.g),c=n(a.b,i.b),m=Ik(a.opacity,i.opacity);return function(f){return a.r=u(f),a.g=l(f),a.b=c(f),a.opacity=m(f),a+""}}return r.gamma=e,r})(1);function jG(e,t){t||(t=[]);var n=e?Math.min(t.length,e.length):0,r=t.slice(),a;return function(i){for(a=0;an&&(i=t.slice(n,i),l[u]?l[u]+=i:l[++u]=i),(r=r[0])===(a=a[0])?l[u]?l[u]+=a:l[++u]=a:(l[++u]=null,c.push({i:u,x:l1(r,a)})),n=r9.lastIndex;return nt&&(n=e,e=t,t=n),function(r){return Math.max(e,Math.min(t,r))}}function UG(e,t,n){var r=e[0],a=e[1],i=t[0],u=t[1];return a2?WG:UG,c=m=null,d}function d(v){return v==null||isNaN(v=+v)?i:(c||(c=l(e.map(r),t,n)))(r(u(v)))}return d.invert=function(v){return u(a((m||(m=l(t,e.map(r),l1)))(v)))},d.domain=function(v){return arguments.length?(e=Array.from(v,c1),f()):e.slice()},d.range=function(v){return arguments.length?(t=Array.from(v),f()):t.slice()},d.rangeRound=function(v){return t=Array.from(v),n=P2,f()},d.clamp=function(v){return arguments.length?(u=v?!0:mn,f()):u!==mn},d.interpolate=function(v){return arguments.length?(n=v,f()):n},d.unknown=function(v){return arguments.length?(i=v,d):i},function(v,_){return r=v,a=_,f()}}function O2(){return g0()(mn,mn)}function VG(e){return Math.abs(e=Math.round(e))>=1e21?e.toLocaleString("en").replace(/,/g,""):e.toString(10)}function p1(e,t){if(!isFinite(e)||e===0)return null;var n=(e=t?e.toExponential(t-1):e.toExponential()).indexOf("e"),r=e.slice(0,n);return[r.length>1?r[0]+r.slice(2):r,+e.slice(n+1)]}function ms(e){return e=p1(Math.abs(e)),e?e[1]:NaN}function KG(e,t){return function(n,r){for(var a=n.length,i=[],u=0,l=e[0],c=0;a>0&&l>0&&(c+l+1>r&&(l=Math.max(1,r-c)),i.push(n.substring(a-=l,a+l)),!((c+=l+1)>r));)l=e[u=(u+1)%e.length];return i.reverse().join(t)}}function XG(e){return function(t){return t.replace(/[0-9]/g,function(n){return e[+n]})}}var YG=/^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;function xl(e){if(!(t=YG.exec(e)))throw new Error("invalid format: "+e);var t;return new k2({fill:t[1],align:t[2],sign:t[3],symbol:t[4],zero:t[5],width:t[6],comma:t[7],precision:t[8]&&t[8].slice(1),trim:t[9],type:t[10]})}xl.prototype=k2.prototype;function k2(e){this.fill=e.fill===void 0?" ":e.fill+"",this.align=e.align===void 0?">":e.align+"",this.sign=e.sign===void 0?"-":e.sign+"",this.symbol=e.symbol===void 0?"":e.symbol+"",this.zero=!!e.zero,this.width=e.width===void 0?void 0:+e.width,this.comma=!!e.comma,this.precision=e.precision===void 0?void 0:+e.precision,this.trim=!!e.trim,this.type=e.type===void 0?"":e.type+""}k2.prototype.toString=function(){return this.fill+this.align+this.sign+this.symbol+(this.zero?"0":"")+(this.width===void 0?"":Math.max(1,this.width|0))+(this.comma?",":"")+(this.precision===void 0?"":"."+Math.max(0,this.precision|0))+(this.trim?"~":"")+this.type};function QG(e){e:for(var t=e.length,n=1,r=-1,a;n0&&(r=0);break}return r>0?e.slice(0,r)+e.slice(a+1):e}var m1;function ZG(e,t){var n=p1(e,t);if(!n)return m1=void 0,e.toPrecision(t);var r=n[0],a=n[1],i=a-(m1=Math.max(-8,Math.min(8,Math.floor(a/3)))*3)+1,u=r.length;return i===u?r:i>u?r+new Array(i-u+1).join("0"):i>0?r.slice(0,i)+"."+r.slice(i):"0."+new Array(1-i).join("0")+p1(e,Math.max(0,t+i-1))[0]}function Kx(e,t){var n=p1(e,t);if(!n)return e+"";var r=n[0],a=n[1];return a<0?"0."+new Array(-a).join("0")+r:r.length>a+1?r.slice(0,a+1)+"."+r.slice(a+1):r+new Array(a-r.length+2).join("0")}const Xx={"%":(e,t)=>(e*100).toFixed(t),b:e=>Math.round(e).toString(2),c:e=>e+"",d:VG,e:(e,t)=>e.toExponential(t),f:(e,t)=>e.toFixed(t),g:(e,t)=>e.toPrecision(t),o:e=>Math.round(e).toString(8),p:(e,t)=>Kx(e*100,t),r:Kx,s:ZG,X:e=>Math.round(e).toString(16).toUpperCase(),x:e=>Math.round(e).toString(16)};function Yx(e){return e}var Qx=Array.prototype.map,Zx=["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];function JG(e){var t=e.grouping===void 0||e.thousands===void 0?Yx:KG(Qx.call(e.grouping,Number),e.thousands+""),n=e.currency===void 0?"":e.currency[0]+"",r=e.currency===void 0?"":e.currency[1]+"",a=e.decimal===void 0?".":e.decimal+"",i=e.numerals===void 0?Yx:XG(Qx.call(e.numerals,String)),u=e.percent===void 0?"%":e.percent+"",l=e.minus===void 0?"−":e.minus+"",c=e.nan===void 0?"NaN":e.nan+"";function m(d,v){d=xl(d);var _=d.fill,w=d.align,g=d.sign,y=d.symbol,b=d.zero,O=d.width,C=d.comma,k=d.precision,P=d.trim,A=d.type;A==="n"?(C=!0,A="g"):Xx[A]||(k===void 0&&(k=12),P=!0,A="g"),(b||_==="0"&&w==="=")&&(b=!0,_="0",w="=");var T=(v&&v.prefix!==void 0?v.prefix:"")+(y==="$"?n:y==="#"&&/[boxX]/.test(A)?"0"+A.toLowerCase():""),q=(y==="$"?r:/[%p]/.test(A)?u:"")+(v&&v.suffix!==void 0?v.suffix:""),j=Xx[A],B=/[defgprs%]/.test(A);k=k===void 0?6:/[gprs]/.test(A)?Math.max(1,Math.min(21,k)):Math.max(0,Math.min(20,k));function $(M){var H=T,F=q,V,K,J;if(A==="c")F=j(M)+F,M="";else{M=+M;var z=M<0||1/M<0;if(M=isNaN(M)?c:j(Math.abs(M),k),P&&(M=QG(M)),z&&+M==0&&g!=="+"&&(z=!1),H=(z?g==="("?g:l:g==="-"||g==="("?"":g)+H,F=(A==="s"&&!isNaN(M)&&m1!==void 0?Zx[8+m1/3]:"")+F+(z&&g==="("?")":""),B){for(V=-1,K=M.length;++VJ||J>57){F=(J===46?a+M.slice(V+1):M.slice(V))+F,M=M.slice(0,V);break}}}C&&!b&&(M=t(M,1/0));var Y=H.length+M.length+F.length,Q=Y>1)+H+M+F+Q.slice(Y);break;default:M=Q+H+M+F;break}return i(M)}return $.toString=function(){return d+""},$}function f(d,v){var _=Math.max(-8,Math.min(8,Math.floor(ms(v)/3)))*3,w=Math.pow(10,-_),g=m((d=xl(d),d.type="f",d),{suffix:Zx[8+_/3]});return function(y){return g(w*y)}}return{format:m,formatPrefix:f}}var Ep,C2,Dk;eF({thousands:",",grouping:[3],currency:["$",""]});function eF(e){return Ep=JG(e),C2=Ep.format,Dk=Ep.formatPrefix,Ep}function tF(e){return Math.max(0,-ms(Math.abs(e)))}function nF(e,t){return Math.max(0,Math.max(-8,Math.min(8,Math.floor(ms(t)/3)))*3-ms(Math.abs(e)))}function rF(e,t){return e=Math.abs(e),t=Math.abs(t)-e,Math.max(0,ms(t)-ms(e))+1}function $k(e,t,n,r){var a=R5(e,t,n),i;switch(r=xl(r??",f"),r.type){case"s":{var u=Math.max(Math.abs(e),Math.abs(t));return r.precision==null&&!isNaN(i=nF(a,u))&&(r.precision=i),Dk(r,u)}case"":case"e":case"g":case"p":case"r":{r.precision==null&&!isNaN(i=rF(a,Math.max(Math.abs(e),Math.abs(t))))&&(r.precision=i-(r.type==="e"));break}case"f":case"%":{r.precision==null&&!isNaN(i=tF(a))&&(r.precision=i-(r.type==="%")*2);break}}return C2(r)}function lo(e){var t=e.domain;return e.ticks=function(n){var r=t();return A5(r[0],r[r.length-1],n??10)},e.tickFormat=function(n,r){var a=t();return $k(a[0],a[a.length-1],n??10,r)},e.nice=function(n){n==null&&(n=10);var r=t(),a=0,i=r.length-1,u=r[a],l=r[i],c,m,f=10;for(l0;){if(m=E5(u,l,n),m===c)return r[a]=u,r[i]=l,t(r);if(m>0)u=Math.floor(u/m)*m,l=Math.ceil(l/m)*m;else if(m<0)u=Math.ceil(u*m)/m,l=Math.floor(l*m)/m;else break;c=m}return e},e}function d1(){var e=O2();return e.copy=function(){return nc(e,d1())},Qn.apply(e,arguments),lo(e)}function Lk(e){var t;function n(r){return r==null||isNaN(r=+r)?t:r}return n.invert=n,n.domain=n.range=function(r){return arguments.length?(e=Array.from(r,c1),n):e.slice()},n.unknown=function(r){return arguments.length?(t=r,n):t},n.copy=function(){return Lk(e).unknown(t)},e=arguments.length?Array.from(e,c1):[0,1],lo(n)}function Hk(e,t){e=e.slice();var n=0,r=e.length-1,a=e[n],i=e[r],u;return iMath.pow(e,t)}function uF(e){return e===Math.E?Math.log:e===10&&Math.log10||e===2&&Math.log2||(e=Math.log(e),t=>Math.log(t)/e)}function tw(e){return(t,n)=>-e(-t,n)}function A2(e){const t=e(Jx,ew),n=t.domain;let r=10,a,i;function u(){return a=uF(r),i=sF(r),n()[0]<0?(a=tw(a),i=tw(i),e(aF,oF)):e(Jx,ew),t}return t.base=function(l){return arguments.length?(r=+l,u()):r},t.domain=function(l){return arguments.length?(n(l),u()):n()},t.ticks=l=>{const c=n();let m=c[0],f=c[c.length-1];const d=f0){for(;v<=_;++v)for(w=1;wf)break;b.push(g)}}else for(;v<=_;++v)for(w=r-1;w>=1;--w)if(g=v>0?w/i(-v):w*i(v),!(gf)break;b.push(g)}b.length*2{if(l==null&&(l=10),c==null&&(c=r===10?"s":","),typeof c!="function"&&(!(r%1)&&(c=xl(c)).precision==null&&(c.trim=!0),c=C2(c)),l===1/0)return c;const m=Math.max(1,r*l/t.ticks().length);return f=>{let d=f/i(Math.round(a(f)));return d*rn(Hk(n(),{floor:l=>i(Math.floor(a(l))),ceil:l=>i(Math.ceil(a(l)))})),t}function Gk(){const e=A2(g0()).domain([1,10]);return e.copy=()=>nc(e,Gk()).base(e.base()),Qn.apply(e,arguments),e}function nw(e){return function(t){return Math.sign(t)*Math.log1p(Math.abs(t/e))}}function rw(e){return function(t){return Math.sign(t)*Math.expm1(Math.abs(t))*e}}function E2(e){var t=1,n=e(nw(t),rw(t));return n.constant=function(r){return arguments.length?e(nw(t=+r),rw(t)):t},lo(n)}function Fk(){var e=E2(g0());return e.copy=function(){return nc(e,Fk()).constant(e.constant())},Qn.apply(e,arguments)}function aw(e){return function(t){return t<0?-Math.pow(-t,e):Math.pow(t,e)}}function lF(e){return e<0?-Math.sqrt(-e):Math.sqrt(e)}function cF(e){return e<0?-e*e:e*e}function R2(e){var t=e(mn,mn),n=1;function r(){return n===1?e(mn,mn):n===.5?e(lF,cF):e(aw(n),aw(1/n))}return t.exponent=function(a){return arguments.length?(n=+a,r()):n},lo(t)}function T2(){var e=R2(g0());return e.copy=function(){return nc(e,T2()).exponent(e.exponent())},Qn.apply(e,arguments),e}function pF(){return T2.apply(null,arguments).exponent(.5)}function ow(e){return Math.sign(e)*e*e}function mF(e){return Math.sign(e)*Math.sqrt(Math.abs(e))}function Bk(){var e=O2(),t=[0,1],n=!1,r;function a(i){var u=mF(e(i));return isNaN(u)?r:n?Math.round(u):u}return a.invert=function(i){return e.invert(ow(i))},a.domain=function(i){return arguments.length?(e.domain(i),a):e.domain()},a.range=function(i){return arguments.length?(e.range((t=Array.from(i,c1)).map(ow)),a):t.slice()},a.rangeRound=function(i){return a.range(i).round(!0)},a.round=function(i){return arguments.length?(n=!!i,a):n},a.clamp=function(i){return arguments.length?(e.clamp(i),a):e.clamp()},a.unknown=function(i){return arguments.length?(r=i,a):r},a.copy=function(){return Bk(e.domain(),t).round(n).clamp(e.clamp()).unknown(r)},Qn.apply(a,arguments),lo(a)}function zk(){var e=[],t=[],n=[],r;function a(){var u=0,l=Math.max(1,t.length);for(n=new Array(l-1);++u0?n[l-1]:e[0],l=n?[r[n-1],t]:[r[m-1],r[m]]},u.unknown=function(c){return arguments.length&&(i=c),u},u.thresholds=function(){return r.slice()},u.copy=function(){return Uk().domain([e,t]).range(a).unknown(i)},Qn.apply(lo(u),arguments)}function Wk(){var e=[.5],t=[0,1],n,r=1;function a(i){return i!=null&&i<=i?t[ec(e,i,0,r)]:n}return a.domain=function(i){return arguments.length?(e=Array.from(i),r=Math.min(e.length,t.length-1),a):e.slice()},a.range=function(i){return arguments.length?(t=Array.from(i),r=Math.min(e.length,t.length-1),a):t.slice()},a.invertExtent=function(i){var u=t.indexOf(i);return[e[u-1],e[u]]},a.unknown=function(i){return arguments.length?(n=i,a):n},a.copy=function(){return Wk().domain(e).range(t).unknown(n)},Qn.apply(a,arguments)}const a9=new Date,o9=new Date;function qt(e,t,n,r){function a(i){return e(i=arguments.length===0?new Date:new Date(+i)),i}return a.floor=i=>(e(i=new Date(+i)),i),a.ceil=i=>(e(i=new Date(i-1)),t(i,1),e(i),i),a.round=i=>{const u=a(i),l=a.ceil(i);return i-u(t(i=new Date(+i),u==null?1:Math.floor(u)),i),a.range=(i,u,l)=>{const c=[];if(i=a.ceil(i),l=l==null?1:Math.floor(l),!(i0))return c;let m;do c.push(m=new Date(+i)),t(i,l),e(i);while(mqt(u=>{if(u>=u)for(;e(u),!i(u);)u.setTime(u-1)},(u,l)=>{if(u>=u)if(l<0)for(;++l<=0;)for(;t(u,-1),!i(u););else for(;--l>=0;)for(;t(u,1),!i(u););}),n&&(a.count=(i,u)=>(a9.setTime(+i),o9.setTime(+u),e(a9),e(o9),Math.floor(n(a9,o9))),a.every=i=>(i=Math.floor(i),!isFinite(i)||!(i>0)?null:i>1?a.filter(r?u=>r(u)%i===0:u=>a.count(0,u)%i===0):a)),a}const f1=qt(()=>{},(e,t)=>{e.setTime(+e+t)},(e,t)=>t-e);f1.every=e=>(e=Math.floor(e),!isFinite(e)||!(e>0)?null:e>1?qt(t=>{t.setTime(Math.floor(t/e)*e)},(t,n)=>{t.setTime(+t+n*e)},(t,n)=>(n-t)/e):f1);f1.range;const na=1e3,Kn=na*60,ra=Kn*60,ma=ra*24,N2=ma*7,iw=ma*30,i9=ma*365,No=qt(e=>{e.setTime(e-e.getMilliseconds())},(e,t)=>{e.setTime(+e+t*na)},(e,t)=>(t-e)/na,e=>e.getUTCSeconds());No.range;const q2=qt(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*na)},(e,t)=>{e.setTime(+e+t*Kn)},(e,t)=>(t-e)/Kn,e=>e.getMinutes());q2.range;const j2=qt(e=>{e.setUTCSeconds(0,0)},(e,t)=>{e.setTime(+e+t*Kn)},(e,t)=>(t-e)/Kn,e=>e.getUTCMinutes());j2.range;const M2=qt(e=>{e.setTime(e-e.getMilliseconds()-e.getSeconds()*na-e.getMinutes()*Kn)},(e,t)=>{e.setTime(+e+t*ra)},(e,t)=>(t-e)/ra,e=>e.getHours());M2.range;const I2=qt(e=>{e.setUTCMinutes(0,0,0)},(e,t)=>{e.setTime(+e+t*ra)},(e,t)=>(t-e)/ra,e=>e.getUTCHours());I2.range;const rc=qt(e=>e.setHours(0,0,0,0),(e,t)=>e.setDate(e.getDate()+t),(e,t)=>(t-e-(t.getTimezoneOffset()-e.getTimezoneOffset())*Kn)/ma,e=>e.getDate()-1);rc.range;const x0=qt(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/ma,e=>e.getUTCDate()-1);x0.range;const Vk=qt(e=>{e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCDate(e.getUTCDate()+t)},(e,t)=>(t-e)/ma,e=>Math.floor(e/ma));Vk.range;function ri(e){return qt(t=>{t.setDate(t.getDate()-(t.getDay()+7-e)%7),t.setHours(0,0,0,0)},(t,n)=>{t.setDate(t.getDate()+n*7)},(t,n)=>(n-t-(n.getTimezoneOffset()-t.getTimezoneOffset())*Kn)/N2)}const w0=ri(0),v1=ri(1),dF=ri(2),fF=ri(3),ds=ri(4),vF=ri(5),hF=ri(6);w0.range;v1.range;dF.range;fF.range;ds.range;vF.range;hF.range;function ai(e){return qt(t=>{t.setUTCDate(t.getUTCDate()-(t.getUTCDay()+7-e)%7),t.setUTCHours(0,0,0,0)},(t,n)=>{t.setUTCDate(t.getUTCDate()+n*7)},(t,n)=>(n-t)/N2)}const b0=ai(0),h1=ai(1),yF=ai(2),_F=ai(3),fs=ai(4),gF=ai(5),xF=ai(6);b0.range;h1.range;yF.range;_F.range;fs.range;gF.range;xF.range;const D2=qt(e=>{e.setDate(1),e.setHours(0,0,0,0)},(e,t)=>{e.setMonth(e.getMonth()+t)},(e,t)=>t.getMonth()-e.getMonth()+(t.getFullYear()-e.getFullYear())*12,e=>e.getMonth());D2.range;const $2=qt(e=>{e.setUTCDate(1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCMonth(e.getUTCMonth()+t)},(e,t)=>t.getUTCMonth()-e.getUTCMonth()+(t.getUTCFullYear()-e.getUTCFullYear())*12,e=>e.getUTCMonth());$2.range;const da=qt(e=>{e.setMonth(0,1),e.setHours(0,0,0,0)},(e,t)=>{e.setFullYear(e.getFullYear()+t)},(e,t)=>t.getFullYear()-e.getFullYear(),e=>e.getFullYear());da.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:qt(t=>{t.setFullYear(Math.floor(t.getFullYear()/e)*e),t.setMonth(0,1),t.setHours(0,0,0,0)},(t,n)=>{t.setFullYear(t.getFullYear()+n*e)});da.range;const fa=qt(e=>{e.setUTCMonth(0,1),e.setUTCHours(0,0,0,0)},(e,t)=>{e.setUTCFullYear(e.getUTCFullYear()+t)},(e,t)=>t.getUTCFullYear()-e.getUTCFullYear(),e=>e.getUTCFullYear());fa.every=e=>!isFinite(e=Math.floor(e))||!(e>0)?null:qt(t=>{t.setUTCFullYear(Math.floor(t.getUTCFullYear()/e)*e),t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0)},(t,n)=>{t.setUTCFullYear(t.getUTCFullYear()+n*e)});fa.range;function Kk(e,t,n,r,a,i){const u=[[No,1,na],[No,5,5*na],[No,15,15*na],[No,30,30*na],[i,1,Kn],[i,5,5*Kn],[i,15,15*Kn],[i,30,30*Kn],[a,1,ra],[a,3,3*ra],[a,6,6*ra],[a,12,12*ra],[r,1,ma],[r,2,2*ma],[n,1,N2],[t,1,iw],[t,3,3*iw],[e,1,i9]];function l(m,f,d){const v=fy).right(u,v);if(_===u.length)return e.every(R5(m/i9,f/i9,d));if(_===0)return f1.every(Math.max(R5(m,f,d),1));const[w,g]=u[v/u[_-1][2]53)return null;"w"in te||(te.w=1),"Z"in te?(Ce=u9(Gu(te.y,0,1)),Le=Ce.getUTCDay(),Ce=Le>4||Le===0?h1.ceil(Ce):h1(Ce),Ce=x0.offset(Ce,(te.V-1)*7),te.y=Ce.getUTCFullYear(),te.m=Ce.getUTCMonth(),te.d=Ce.getUTCDate()+(te.w+6)%7):(Ce=s9(Gu(te.y,0,1)),Le=Ce.getDay(),Ce=Le>4||Le===0?v1.ceil(Ce):v1(Ce),Ce=rc.offset(Ce,(te.V-1)*7),te.y=Ce.getFullYear(),te.m=Ce.getMonth(),te.d=Ce.getDate()+(te.w+6)%7)}else("W"in te||"U"in te)&&("w"in te||(te.w="u"in te?te.u%7:"W"in te?1:0),Le="Z"in te?u9(Gu(te.y,0,1)).getUTCDay():s9(Gu(te.y,0,1)).getDay(),te.m=0,te.d="W"in te?(te.w+6)%7+te.W*7-(Le+5)%7:te.w+te.U*7-(Le+6)%7);return"Z"in te?(te.H+=te.Z/100|0,te.M+=te.Z%100,u9(te)):s9(te)}}function q(ae,de,fe,te){for(var be=0,Ce=de.length,Le=fe.length,ze,ot;be=Le)return-1;if(ze=de.charCodeAt(be++),ze===37){if(ze=de.charAt(be++),ot=P[ze in sw?de.charAt(be++):ze],!ot||(te=ot(ae,fe,te))<0)return-1}else if(ze!=fe.charCodeAt(te++))return-1}return te}function j(ae,de,fe){var te=m.exec(de.slice(fe));return te?(ae.p=f.get(te[0].toLowerCase()),fe+te[0].length):-1}function B(ae,de,fe){var te=_.exec(de.slice(fe));return te?(ae.w=w.get(te[0].toLowerCase()),fe+te[0].length):-1}function $(ae,de,fe){var te=d.exec(de.slice(fe));return te?(ae.w=v.get(te[0].toLowerCase()),fe+te[0].length):-1}function M(ae,de,fe){var te=b.exec(de.slice(fe));return te?(ae.m=O.get(te[0].toLowerCase()),fe+te[0].length):-1}function H(ae,de,fe){var te=g.exec(de.slice(fe));return te?(ae.m=y.get(te[0].toLowerCase()),fe+te[0].length):-1}function F(ae,de,fe){return q(ae,t,de,fe)}function V(ae,de,fe){return q(ae,n,de,fe)}function K(ae,de,fe){return q(ae,r,de,fe)}function J(ae){return u[ae.getDay()]}function z(ae){return i[ae.getDay()]}function Y(ae){return c[ae.getMonth()]}function Q(ae){return l[ae.getMonth()]}function D(ae){return a[+(ae.getHours()>=12)]}function W(ae){return 1+~~(ae.getMonth()/3)}function oe(ae){return u[ae.getUTCDay()]}function me(ae){return i[ae.getUTCDay()]}function ge(ae){return c[ae.getUTCMonth()]}function Se(ae){return l[ae.getUTCMonth()]}function qe(ae){return a[+(ae.getUTCHours()>=12)]}function pe(ae){return 1+~~(ae.getUTCMonth()/3)}return{format:function(ae){var de=A(ae+="",C);return de.toString=function(){return ae},de},parse:function(ae){var de=T(ae+="",!1);return de.toString=function(){return ae},de},utcFormat:function(ae){var de=A(ae+="",k);return de.toString=function(){return ae},de},utcParse:function(ae){var de=T(ae+="",!0);return de.toString=function(){return ae},de}}}var sw={"-":"",_:" ",0:"0"},Ht=/^\s*\d+/,kF=/^%/,CF=/[\\^$*+?|[\]().{}]/g;function Fe(e,t,n){var r=e<0?"-":"",a=(r?-e:e)+"",i=a.length;return r+(i[t.toLowerCase(),n]))}function EF(e,t,n){var r=Ht.exec(t.slice(n,n+1));return r?(e.w=+r[0],n+r[0].length):-1}function RF(e,t,n){var r=Ht.exec(t.slice(n,n+1));return r?(e.u=+r[0],n+r[0].length):-1}function TF(e,t,n){var r=Ht.exec(t.slice(n,n+2));return r?(e.U=+r[0],n+r[0].length):-1}function NF(e,t,n){var r=Ht.exec(t.slice(n,n+2));return r?(e.V=+r[0],n+r[0].length):-1}function qF(e,t,n){var r=Ht.exec(t.slice(n,n+2));return r?(e.W=+r[0],n+r[0].length):-1}function uw(e,t,n){var r=Ht.exec(t.slice(n,n+4));return r?(e.y=+r[0],n+r[0].length):-1}function lw(e,t,n){var r=Ht.exec(t.slice(n,n+2));return r?(e.y=+r[0]+(+r[0]>68?1900:2e3),n+r[0].length):-1}function jF(e,t,n){var r=/^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(t.slice(n,n+6));return r?(e.Z=r[1]?0:-(r[2]+(r[3]||"00")),n+r[0].length):-1}function MF(e,t,n){var r=Ht.exec(t.slice(n,n+1));return r?(e.q=r[0]*3-3,n+r[0].length):-1}function IF(e,t,n){var r=Ht.exec(t.slice(n,n+2));return r?(e.m=r[0]-1,n+r[0].length):-1}function cw(e,t,n){var r=Ht.exec(t.slice(n,n+2));return r?(e.d=+r[0],n+r[0].length):-1}function DF(e,t,n){var r=Ht.exec(t.slice(n,n+3));return r?(e.m=0,e.d=+r[0],n+r[0].length):-1}function pw(e,t,n){var r=Ht.exec(t.slice(n,n+2));return r?(e.H=+r[0],n+r[0].length):-1}function $F(e,t,n){var r=Ht.exec(t.slice(n,n+2));return r?(e.M=+r[0],n+r[0].length):-1}function LF(e,t,n){var r=Ht.exec(t.slice(n,n+2));return r?(e.S=+r[0],n+r[0].length):-1}function HF(e,t,n){var r=Ht.exec(t.slice(n,n+3));return r?(e.L=+r[0],n+r[0].length):-1}function GF(e,t,n){var r=Ht.exec(t.slice(n,n+6));return r?(e.L=Math.floor(r[0]/1e3),n+r[0].length):-1}function FF(e,t,n){var r=kF.exec(t.slice(n,n+1));return r?n+r[0].length:-1}function BF(e,t,n){var r=Ht.exec(t.slice(n));return r?(e.Q=+r[0],n+r[0].length):-1}function zF(e,t,n){var r=Ht.exec(t.slice(n));return r?(e.s=+r[0],n+r[0].length):-1}function mw(e,t){return Fe(e.getDate(),t,2)}function UF(e,t){return Fe(e.getHours(),t,2)}function WF(e,t){return Fe(e.getHours()%12||12,t,2)}function VF(e,t){return Fe(1+rc.count(da(e),e),t,3)}function Xk(e,t){return Fe(e.getMilliseconds(),t,3)}function KF(e,t){return Xk(e,t)+"000"}function XF(e,t){return Fe(e.getMonth()+1,t,2)}function YF(e,t){return Fe(e.getMinutes(),t,2)}function QF(e,t){return Fe(e.getSeconds(),t,2)}function ZF(e){var t=e.getDay();return t===0?7:t}function JF(e,t){return Fe(w0.count(da(e)-1,e),t,2)}function Yk(e){var t=e.getDay();return t>=4||t===0?ds(e):ds.ceil(e)}function eB(e,t){return e=Yk(e),Fe(ds.count(da(e),e)+(da(e).getDay()===4),t,2)}function tB(e){return e.getDay()}function nB(e,t){return Fe(v1.count(da(e)-1,e),t,2)}function rB(e,t){return Fe(e.getFullYear()%100,t,2)}function aB(e,t){return e=Yk(e),Fe(e.getFullYear()%100,t,2)}function oB(e,t){return Fe(e.getFullYear()%1e4,t,4)}function iB(e,t){var n=e.getDay();return e=n>=4||n===0?ds(e):ds.ceil(e),Fe(e.getFullYear()%1e4,t,4)}function sB(e){var t=e.getTimezoneOffset();return(t>0?"-":(t*=-1,"+"))+Fe(t/60|0,"0",2)+Fe(t%60,"0",2)}function dw(e,t){return Fe(e.getUTCDate(),t,2)}function uB(e,t){return Fe(e.getUTCHours(),t,2)}function lB(e,t){return Fe(e.getUTCHours()%12||12,t,2)}function cB(e,t){return Fe(1+x0.count(fa(e),e),t,3)}function Qk(e,t){return Fe(e.getUTCMilliseconds(),t,3)}function pB(e,t){return Qk(e,t)+"000"}function mB(e,t){return Fe(e.getUTCMonth()+1,t,2)}function dB(e,t){return Fe(e.getUTCMinutes(),t,2)}function fB(e,t){return Fe(e.getUTCSeconds(),t,2)}function vB(e){var t=e.getUTCDay();return t===0?7:t}function hB(e,t){return Fe(b0.count(fa(e)-1,e),t,2)}function Zk(e){var t=e.getUTCDay();return t>=4||t===0?fs(e):fs.ceil(e)}function yB(e,t){return e=Zk(e),Fe(fs.count(fa(e),e)+(fa(e).getUTCDay()===4),t,2)}function _B(e){return e.getUTCDay()}function gB(e,t){return Fe(h1.count(fa(e)-1,e),t,2)}function xB(e,t){return Fe(e.getUTCFullYear()%100,t,2)}function wB(e,t){return e=Zk(e),Fe(e.getUTCFullYear()%100,t,2)}function bB(e,t){return Fe(e.getUTCFullYear()%1e4,t,4)}function SB(e,t){var n=e.getUTCDay();return e=n>=4||n===0?fs(e):fs.ceil(e),Fe(e.getUTCFullYear()%1e4,t,4)}function PB(){return"+0000"}function fw(){return"%"}function vw(e){return+e}function hw(e){return Math.floor(+e/1e3)}var Ii,Jk,eC;OB({dateTime:"%x, %X",date:"%-m/%-d/%Y",time:"%-I:%M:%S %p",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});function OB(e){return Ii=OF(e),Jk=Ii.format,Ii.parse,eC=Ii.utcFormat,Ii.utcParse,Ii}function kB(e){return new Date(e)}function CB(e){return e instanceof Date?+e:+new Date(+e)}function L2(e,t,n,r,a,i,u,l,c,m){var f=O2(),d=f.invert,v=f.domain,_=m(".%L"),w=m(":%S"),g=m("%I:%M"),y=m("%I %p"),b=m("%a %d"),O=m("%b %d"),C=m("%B"),k=m("%Y");function P(A){return(c(A)t(a/(e.length-1)))},n.quantiles=function(r){return Array.from({length:r+1},(a,i)=>hG(e,i/r))},n.copy=function(){return aC(t).domain(e)},_a.apply(n,arguments)}function P0(){var e=0,t=.5,n=1,r=1,a,i,u,l,c,m=mn,f,d=!1,v;function _(g){return isNaN(g=+g)?v:(g=.5+((g=+f(g))-i)*(r*gn}return c9=e,c9}var p9,xw;function qB(){if(xw)return p9;xw=1;var e=uC(),t=NB(),n=Bs();function r(a){return a&&a.length?e(a,n,t):void 0}return p9=r,p9}var jB=qB();const Qa=tt(jB);var m9,ww;function MB(){if(ww)return m9;ww=1;function e(t,n){return te.e^i.s<0?1:-1;for(r=i.d.length,a=e.d.length,t=0,n=re.d[t]^i.s<0?1:-1;return r===a?0:r>a^i.s<0?1:-1};ye.decimalPlaces=ye.dp=function(){var e=this,t=e.d.length-1,n=(t-e.e)*lt;if(t=e.d[t],t)for(;t%10==0;t/=10)n--;return n<0?0:n};ye.dividedBy=ye.div=function(e){return la(this,new this.constructor(e))};ye.dividedToIntegerBy=ye.idiv=function(e){var t=this,n=t.constructor;return nt(la(t,new n(e),0,1),n.precision)};ye.equals=ye.eq=function(e){return!this.cmp(e)};ye.exponent=function(){return Ot(this)};ye.greaterThan=ye.gt=function(e){return this.cmp(e)>0};ye.greaterThanOrEqualTo=ye.gte=function(e){return this.cmp(e)>=0};ye.isInteger=ye.isint=function(){return this.e>this.d.length-2};ye.isNegative=ye.isneg=function(){return this.s<0};ye.isPositive=ye.ispos=function(){return this.s>0};ye.isZero=function(){return this.s===0};ye.lessThan=ye.lt=function(e){return this.cmp(e)<0};ye.lessThanOrEqualTo=ye.lte=function(e){return this.cmp(e)<1};ye.logarithm=ye.log=function(e){var t,n=this,r=n.constructor,a=r.precision,i=a+5;if(e===void 0)e=new r(10);else if(e=new r(e),e.s<1||e.eq(qn))throw Error(Yn+"NaN");if(n.s<1)throw Error(Yn+(n.s?"NaN":"-Infinity"));return n.eq(qn)?new r(0):(pt=!1,t=la(wl(n,i),wl(e,i),i),pt=!0,nt(t,a))};ye.minus=ye.sub=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?mC(t,e):cC(t,(e.s=-e.s,e))};ye.modulo=ye.mod=function(e){var t,n=this,r=n.constructor,a=r.precision;if(e=new r(e),!e.s)throw Error(Yn+"NaN");return n.s?(pt=!1,t=la(n,e,0,1).times(e),pt=!0,n.minus(t)):nt(new r(n),a)};ye.naturalExponential=ye.exp=function(){return pC(this)};ye.naturalLogarithm=ye.ln=function(){return wl(this)};ye.negated=ye.neg=function(){var e=new this.constructor(this);return e.s=-e.s||0,e};ye.plus=ye.add=function(e){var t=this;return e=new t.constructor(e),t.s==e.s?cC(t,e):mC(t,(e.s=-e.s,e))};ye.precision=ye.sd=function(e){var t,n,r,a=this;if(e!==void 0&&e!==!!e&&e!==1&&e!==0)throw Error(Fo+e);if(t=Ot(a)+1,r=a.d.length-1,n=r*lt+1,r=a.d[r],r){for(;r%10==0;r/=10)n--;for(r=a.d[0];r>=10;r/=10)n++}return e&&t>n?t:n};ye.squareRoot=ye.sqrt=function(){var e,t,n,r,a,i,u,l=this,c=l.constructor;if(l.s<1){if(!l.s)return new c(0);throw Error(Yn+"NaN")}for(e=Ot(l),pt=!1,a=Math.sqrt(+l),a==0||a==1/0?(t=Tr(l.d),(t.length+e)%2==0&&(t+="0"),a=Math.sqrt(t),e=Ws((e+1)/2)-(e<0||e%2),a==1/0?t="5e"+e:(t=a.toExponential(),t=t.slice(0,t.indexOf("e")+1)+e),r=new c(t)):r=new c(a.toString()),n=c.precision,a=u=n+3;;)if(i=r,r=i.plus(la(l,i,u+2)).times(.5),Tr(i.d).slice(0,u)===(t=Tr(r.d)).slice(0,u)){if(t=t.slice(u-3,u+1),a==u&&t=="4999"){if(nt(i,n+1,0),i.times(i).eq(l)){r=i;break}}else if(t!="9999")break;u+=4}return pt=!0,nt(r,n)};ye.times=ye.mul=function(e){var t,n,r,a,i,u,l,c,m,f=this,d=f.constructor,v=f.d,_=(e=new d(e)).d;if(!f.s||!e.s)return new d(0);for(e.s*=f.s,n=f.e+e.e,c=v.length,m=_.length,c=0;){for(t=0,a=c+r;a>r;)l=i[a]+_[r]*v[a-r-1]+t,i[a--]=l%$t|0,t=l/$t|0;i[a]=(i[a]+t)%$t|0}for(;!i[--u];)i.pop();return t?++n:i.shift(),e.d=i,e.e=n,pt?nt(e,d.precision):e};ye.toDecimalPlaces=ye.todp=function(e,t){var n=this,r=n.constructor;return n=new r(n),e===void 0?n:(Gr(e,0,Us),t===void 0?t=r.rounding:Gr(t,0,8),nt(n,e+Ot(n)+1,t))};ye.toExponential=function(e,t){var n,r=this,a=r.constructor;return e===void 0?n=Yo(r,!0):(Gr(e,0,Us),t===void 0?t=a.rounding:Gr(t,0,8),r=nt(new a(r),e+1,t),n=Yo(r,!0,e+1)),n};ye.toFixed=function(e,t){var n,r,a=this,i=a.constructor;return e===void 0?Yo(a):(Gr(e,0,Us),t===void 0?t=i.rounding:Gr(t,0,8),r=nt(new i(a),e+Ot(a)+1,t),n=Yo(r.abs(),!1,e+Ot(r)+1),a.isneg()&&!a.isZero()?"-"+n:n)};ye.toInteger=ye.toint=function(){var e=this,t=e.constructor;return nt(new t(e),Ot(e)+1,t.rounding)};ye.toNumber=function(){return+this};ye.toPower=ye.pow=function(e){var t,n,r,a,i,u,l=this,c=l.constructor,m=12,f=+(e=new c(e));if(!e.s)return new c(qn);if(l=new c(l),!l.s){if(e.s<1)throw Error(Yn+"Infinity");return l}if(l.eq(qn))return l;if(r=c.precision,e.eq(qn))return nt(l,r);if(t=e.e,n=e.d.length-1,u=t>=n,i=l.s,u){if((n=f<0?-f:f)<=lC){for(a=new c(qn),t=Math.ceil(r/lt+4),pt=!1;n%2&&(a=a.times(l),Cw(a.d,t)),n=Ws(n/2),n!==0;)l=l.times(l),Cw(l.d,t);return pt=!0,e.s<0?new c(qn).div(a):nt(a,r)}}else if(i<0)throw Error(Yn+"NaN");return i=i<0&&e.d[Math.max(t,n)]&1?-1:1,l.s=1,pt=!1,a=e.times(wl(l,r+m)),pt=!0,a=pC(a),a.s=i,a};ye.toPrecision=function(e,t){var n,r,a=this,i=a.constructor;return e===void 0?(n=Ot(a),r=Yo(a,n<=i.toExpNeg||n>=i.toExpPos)):(Gr(e,1,Us),t===void 0?t=i.rounding:Gr(t,0,8),a=nt(new i(a),e,t),n=Ot(a),r=Yo(a,e<=n||n<=i.toExpNeg,e)),r};ye.toSignificantDigits=ye.tosd=function(e,t){var n=this,r=n.constructor;return e===void 0?(e=r.precision,t=r.rounding):(Gr(e,1,Us),t===void 0?t=r.rounding:Gr(t,0,8)),nt(new r(n),e,t)};ye.toString=ye.valueOf=ye.val=ye.toJSON=ye[Symbol.for("nodejs.util.inspect.custom")]=function(){var e=this,t=Ot(e),n=e.constructor;return Yo(e,t<=n.toExpNeg||t>=n.toExpPos)};function cC(e,t){var n,r,a,i,u,l,c,m,f=e.constructor,d=f.precision;if(!e.s||!t.s)return t.s||(t=new f(e)),pt?nt(t,d):t;if(c=e.d,m=t.d,u=e.e,a=t.e,c=c.slice(),i=u-a,i){for(i<0?(r=c,i=-i,l=m.length):(r=m,a=u,l=c.length),u=Math.ceil(d/lt),l=u>l?u+1:l+1,i>l&&(i=l,r.length=1),r.reverse();i--;)r.push(0);r.reverse()}for(l=c.length,i=m.length,l-i<0&&(i=l,r=m,m=c,c=r),n=0;i;)n=(c[--i]=c[i]+m[i]+n)/$t|0,c[i]%=$t;for(n&&(c.unshift(n),++a),l=c.length;c[--l]==0;)c.pop();return t.d=c,t.e=a,pt?nt(t,d):t}function Gr(e,t,n){if(e!==~~e||en)throw Error(Fo+e)}function Tr(e){var t,n,r,a=e.length-1,i="",u=e[0];if(a>0){for(i+=u,t=1;tu?1:-1;else for(l=c=0;la[l]?1:-1;break}return c}function n(r,a,i){for(var u=0;i--;)r[i]-=u,u=r[i]1;)r.shift()}return function(r,a,i,u){var l,c,m,f,d,v,_,w,g,y,b,O,C,k,P,A,T,q,j=r.constructor,B=r.s==a.s?1:-1,$=r.d,M=a.d;if(!r.s)return new j(r);if(!a.s)throw Error(Yn+"Division by zero");for(c=r.e-a.e,T=M.length,P=$.length,_=new j(B),w=_.d=[],m=0;M[m]==($[m]||0);)++m;if(M[m]>($[m]||0)&&--c,i==null?O=i=j.precision:u?O=i+(Ot(r)-Ot(a))+1:O=i,O<0)return new j(0);if(O=O/lt+2|0,m=0,T==1)for(f=0,M=M[0],O++;(m1&&(M=e(M,f),$=e($,f),T=M.length,P=$.length),k=T,g=$.slice(0,T),y=g.length;y=$t/2&&++A;do f=0,l=t(M,g,T,y),l<0?(b=g[0],T!=y&&(b=b*$t+(g[1]||0)),f=b/A|0,f>1?(f>=$t&&(f=$t-1),d=e(M,f),v=d.length,y=g.length,l=t(d,g,v,y),l==1&&(f--,n(d,T16)throw Error(F2+Ot(e));if(!e.s)return new f(qn);for(pt=!1,l=d,u=new f(.03125);e.abs().gte(.1);)e=e.times(u),m+=5;for(r=Math.log(Eo(2,m))/Math.LN10*2+5|0,l+=r,n=a=i=new f(qn),f.precision=l;;){if(a=nt(a.times(e),l),n=n.times(++c),u=i.plus(la(a,n,l)),Tr(u.d).slice(0,l)===Tr(i.d).slice(0,l)){for(;m--;)i=nt(i.times(i),l);return f.precision=d,t==null?(pt=!0,nt(i,d)):i}i=u}}function Ot(e){for(var t=e.e*lt,n=e.d[0];n>=10;n/=10)t++;return t}function y9(e,t,n){if(t>e.LN10.sd())throw pt=!0,n&&(e.precision=n),Error(Yn+"LN10 precision limit exceeded");return nt(new e(e.LN10),t)}function Ba(e){for(var t="";e--;)t+="0";return t}function wl(e,t){var n,r,a,i,u,l,c,m,f,d=1,v=10,_=e,w=_.d,g=_.constructor,y=g.precision;if(_.s<1)throw Error(Yn+(_.s?"NaN":"-Infinity"));if(_.eq(qn))return new g(0);if(t==null?(pt=!1,m=y):m=t,_.eq(10))return t==null&&(pt=!0),y9(g,m);if(m+=v,g.precision=m,n=Tr(w),r=n.charAt(0),i=Ot(_),Math.abs(i)<15e14){for(;r<7&&r!=1||r==1&&n.charAt(1)>3;)_=_.times(e),n=Tr(_.d),r=n.charAt(0),d++;i=Ot(_),r>1?(_=new g("0."+n),i++):_=new g(r+"."+n.slice(1))}else return c=y9(g,m+2,y).times(i+""),_=wl(new g(r+"."+n.slice(1)),m-v).plus(c),g.precision=y,t==null?(pt=!0,nt(_,y)):_;for(l=u=_=la(_.minus(qn),_.plus(qn),m),f=nt(_.times(_),m),a=3;;){if(u=nt(u.times(f),m),c=l.plus(la(u,new g(a),m)),Tr(c.d).slice(0,m)===Tr(l.d).slice(0,m))return l=l.times(2),i!==0&&(l=l.plus(y9(g,m+2,y).times(i+""))),l=la(l,new g(d),m),g.precision=y,t==null?(pt=!0,nt(l,y)):l;l=c,a+=2}}function kw(e,t){var n,r,a;for((n=t.indexOf("."))>-1&&(t=t.replace(".","")),(r=t.search(/e/i))>0?(n<0&&(n=r),n+=+t.slice(r+1),t=t.substring(0,r)):n<0&&(n=t.length),r=0;t.charCodeAt(r)===48;)++r;for(a=t.length;t.charCodeAt(a-1)===48;)--a;if(t=t.slice(r,a),t){if(a-=r,n=n-r-1,e.e=Ws(n/lt),e.d=[],r=(n+1)%lt,n<0&&(r+=lt),ry1||e.e<-y1))throw Error(F2+n)}else e.s=0,e.e=0,e.d=[0];return e}function nt(e,t,n){var r,a,i,u,l,c,m,f,d=e.d;for(u=1,i=d[0];i>=10;i/=10)u++;if(r=t-u,r<0)r+=lt,a=t,m=d[f=0];else{if(f=Math.ceil((r+1)/lt),i=d.length,f>=i)return e;for(m=i=d[f],u=1;i>=10;i/=10)u++;r%=lt,a=r-lt+u}if(n!==void 0&&(i=Eo(10,u-a-1),l=m/i%10|0,c=t<0||d[f+1]!==void 0||m%i,c=n<4?(l||c)&&(n==0||n==(e.s<0?3:2)):l>5||l==5&&(n==4||c||n==6&&(r>0?a>0?m/Eo(10,u-a):0:d[f-1])%10&1||n==(e.s<0?8:7))),t<1||!d[0])return c?(i=Ot(e),d.length=1,t=t-i-1,d[0]=Eo(10,(lt-t%lt)%lt),e.e=Ws(-t/lt)||0):(d.length=1,d[0]=e.e=e.s=0),e;if(r==0?(d.length=f,i=1,f--):(d.length=f+1,i=Eo(10,lt-r),d[f]=a>0?(m/Eo(10,u-a)%Eo(10,a)|0)*i:0),c)for(;;)if(f==0){(d[0]+=i)==$t&&(d[0]=1,++e.e);break}else{if(d[f]+=i,d[f]!=$t)break;d[f--]=0,i=1}for(r=d.length;d[--r]===0;)d.pop();if(pt&&(e.e>y1||e.e<-y1))throw Error(F2+Ot(e));return e}function mC(e,t){var n,r,a,i,u,l,c,m,f,d,v=e.constructor,_=v.precision;if(!e.s||!t.s)return t.s?t.s=-t.s:t=new v(e),pt?nt(t,_):t;if(c=e.d,d=t.d,r=t.e,m=e.e,c=c.slice(),u=m-r,u){for(f=u<0,f?(n=c,u=-u,l=d.length):(n=d,r=m,l=c.length),a=Math.max(Math.ceil(_/lt),l)+2,u>a&&(u=a,n.length=1),n.reverse(),a=u;a--;)n.push(0);n.reverse()}else{for(a=c.length,l=d.length,f=a0;--a)c[l++]=0;for(a=d.length;a>u;){if(c[--a]0?i=i.charAt(0)+"."+i.slice(1)+Ba(r):u>1&&(i=i.charAt(0)+"."+i.slice(1)),i=i+(a<0?"e":"e+")+a):a<0?(i="0."+Ba(-a-1)+i,n&&(r=n-u)>0&&(i+=Ba(r))):a>=u?(i+=Ba(a+1-u),n&&(r=n-a-1)>0&&(i=i+"."+Ba(r))):((r=a+1)0&&(a+1===u&&(i+="."),i+=Ba(r))),e.s<0?"-"+i:i}function Cw(e,t){if(e.length>t)return e.length=t,!0}function dC(e){var t,n,r;function a(i){var u=this;if(!(u instanceof a))return new a(i);if(u.constructor=a,i instanceof a){u.s=i.s,u.e=i.e,u.d=(i=i.d)?i.slice():i;return}if(typeof i=="number"){if(i*0!==0)throw Error(Fo+i);if(i>0)u.s=1;else if(i<0)i=-i,u.s=-1;else{u.s=0,u.e=0,u.d=[0];return}if(i===~~i&&i<1e7){u.e=0,u.d=[i];return}return kw(u,i.toString())}else if(typeof i!="string")throw Error(Fo+i);if(i.charCodeAt(0)===45?(i=i.slice(1),u.s=-1):u.s=1,UB.test(i))kw(u,i);else throw Error(Fo+i)}if(a.prototype=ye,a.ROUND_UP=0,a.ROUND_DOWN=1,a.ROUND_CEIL=2,a.ROUND_FLOOR=3,a.ROUND_HALF_UP=4,a.ROUND_HALF_DOWN=5,a.ROUND_HALF_EVEN=6,a.ROUND_HALF_CEIL=7,a.ROUND_HALF_FLOOR=8,a.clone=dC,a.config=a.set=WB,e===void 0&&(e={}),e)for(r=["precision","rounding","toExpNeg","toExpPos","LN10"],t=0;t=a[t+1]&&r<=a[t+2])this[n]=r;else throw Error(Fo+n+": "+r);if((r=e[n="LN10"])!==void 0)if(r==Math.LN10)this[n]=new this(r);else throw Error(Fo+n+": "+r);return this}var B2=dC(zB);qn=new B2(1);const et=B2;function VB(e){return QB(e)||YB(e)||XB(e)||KB()}function KB(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function XB(e,t){if(e){if(typeof e=="string")return M5(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return M5(e,t)}}function YB(e){if(typeof Symbol<"u"&&Symbol.iterator in Object(e))return Array.from(e)}function QB(e){if(Array.isArray(e))return M5(e)}function M5(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=t?n.apply(void 0,a):e(t-u,Aw(function(){for(var l=arguments.length,c=new Array(l),m=0;me.length)&&(t=e.length);for(var n=0,r=new Array(t);n"u"||!(Symbol.iterator in Object(e)))){var n=[],r=!0,a=!1,i=void 0;try{for(var u=e[Symbol.iterator](),l;!(r=(l=u.next()).done)&&(n.push(l.value),!(t&&n.length===t));r=!0);}catch(c){a=!0,i=c}finally{try{!r&&u.return!=null&&u.return()}finally{if(a)throw i}}return n}}function mz(e){if(Array.isArray(e))return e}function _C(e){var t=bl(e,2),n=t[0],r=t[1],a=n,i=r;return n>r&&(a=r,i=n),[a,i]}function gC(e,t,n){if(e.lte(0))return new et(0);var r=C0.getDigitCount(e.toNumber()),a=new et(10).pow(r),i=e.div(a),u=r!==1?.05:.1,l=new et(Math.ceil(i.div(u).toNumber())).add(n).mul(u),c=l.mul(a);return t?c:new et(Math.ceil(c))}function dz(e,t,n){var r=1,a=new et(e);if(!a.isint()&&n){var i=Math.abs(e);i<1?(r=new et(10).pow(C0.getDigitCount(e)-1),a=new et(Math.floor(a.div(r).toNumber())).mul(r)):i>1&&(a=new et(Math.floor(e)))}else e===0?a=new et(Math.floor((t-1)/2)):n||(a=new et(Math.floor(e)));var u=Math.floor((t-1)/2),l=tz(ez(function(c){return a.add(new et(c-u).mul(r)).toNumber()}),I5);return l(0,t)}function xC(e,t,n,r){var a=arguments.length>4&&arguments[4]!==void 0?arguments[4]:0;if(!Number.isFinite((t-e)/(n-1)))return{step:new et(0),tickMin:new et(0),tickMax:new et(0)};var i=gC(new et(t).sub(e).div(n-1),r,a),u;e<=0&&t>=0?u=new et(0):(u=new et(e).add(t).div(2),u=u.sub(new et(u).mod(i)));var l=Math.ceil(u.sub(e).div(i).toNumber()),c=Math.ceil(new et(t).sub(u).div(i).toNumber()),m=l+c+1;return m>n?xC(e,t,n,r,a+1):(m0?c+(n-m):c,l=t>0?l:l+(n-m)),{step:i,tickMin:u.sub(new et(l).mul(i)),tickMax:u.add(new et(c).mul(i))})}function fz(e){var t=bl(e,2),n=t[0],r=t[1],a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:6,i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,u=Math.max(a,2),l=_C([n,r]),c=bl(l,2),m=c[0],f=c[1];if(m===-1/0||f===1/0){var d=f===1/0?[m].concat($5(I5(0,a-1).map(function(){return 1/0}))):[].concat($5(I5(0,a-1).map(function(){return-1/0})),[f]);return n>r?D5(d):d}if(m===f)return dz(m,a,i);var v=xC(m,f,u,i),_=v.step,w=v.tickMin,g=v.tickMax,y=C0.rangeStep(w,g.add(new et(.1).mul(_)),_);return n>r?D5(y):y}function vz(e,t){var n=bl(e,2),r=n[0],a=n[1],i=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0,u=_C([r,a]),l=bl(u,2),c=l[0],m=l[1];if(c===-1/0||m===1/0)return[r,a];if(c===m)return[c];var f=Math.max(t,2),d=gC(new et(m).sub(c).div(f-1),i,0),v=[].concat($5(C0.rangeStep(new et(c),new et(m).sub(new et(.99).mul(d)),d)),[m]);return r>a?D5(v):v}var hz=hC(fz),yz=hC(vz),_z="Invariant failed";function Qo(e,t){throw new Error(_z)}var gz=["offset","layout","width","dataKey","data","dataPointFormatter","xAxis","yAxis"];function vs(e){"@babel/helpers - typeof";return vs=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},vs(e)}function _1(){return _1=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function kz(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function Cz(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Az(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n1&&arguments[1]!==void 0?arguments[1]:[],a=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0,u=-1,l=(n=r==null?void 0:r.length)!==null&&n!==void 0?n:0;if(l<=1)return 0;if(i&&i.axisType==="angleAxis"&&Math.abs(Math.abs(i.range[1]-i.range[0])-360)<=1e-6)for(var c=i.range,m=0;m0?a[m-1].coordinate:a[l-1].coordinate,d=a[m].coordinate,v=m>=l-1?a[0].coordinate:a[m+1].coordinate,_=void 0;if(mr(d-f)!==mr(v-d)){var w=[];if(mr(v-d)===mr(c[1]-c[0])){_=v;var g=d+c[1]-c[0];w[0]=Math.min(g,(g+f)/2),w[1]=Math.max(g,(g+f)/2)}else{_=f;var y=v+c[1]-c[0];w[0]=Math.min(d,(y+d)/2),w[1]=Math.max(d,(y+d)/2)}var b=[Math.min(d,(_+d)/2),Math.max(d,(_+d)/2)];if(t>b[0]&&t<=b[1]||t>=w[0]&&t<=w[1]){u=a[m].index;break}}else{var O=Math.min(f,v),C=Math.max(f,v);if(t>(O+d)/2&&t<=(C+d)/2){u=a[m].index;break}}}else for(var k=0;k0&&k(r[k].coordinate+r[k-1].coordinate)/2&&t<=(r[k].coordinate+r[k+1].coordinate)/2||k===l-1&&t>(r[k].coordinate+r[k-1].coordinate)/2){u=r[k].index;break}return u},z2=function(t){var n,r=t,a=r.type.displayName,i=(n=t.type)!==null&&n!==void 0&&n.defaultProps?yt(yt({},t.type.defaultProps),t.props):t.props,u=i.stroke,l=i.fill,c;switch(a){case"Line":c=u;break;case"Area":case"Radar":c=u&&u!=="none"?u:l;break;default:c=l;break}return c},Uz=function(t){var n=t.barSize,r=t.totalSize,a=t.stackGroups,i=a===void 0?{}:a;if(!i)return{};for(var u={},l=Object.keys(i),c=0,m=l.length;c=0});if(b&&b.length){var O=b[0].type.defaultProps,C=O!==void 0?yt(yt({},O),b[0].props):b[0].props,k=C.barSize,P=C[y];u[P]||(u[P]=[]);var A=Re(k)?n:k;u[P].push({item:b[0],stackList:b.slice(1),barSize:Re(A)?void 0:Ko(A,r,0)})}}return u},Wz=function(t){var n=t.barGap,r=t.barCategoryGap,a=t.bandSize,i=t.sizeList,u=i===void 0?[]:i,l=t.maxBarSize,c=u.length;if(c<1)return null;var m=Ko(n,a,0,!0),f,d=[];if(u[0].barSize===+u[0].barSize){var v=!1,_=a/c,w=u.reduce(function(k,P){return k+P.barSize||0},0);w+=(c-1)*m,w>=a&&(w-=(c-1)*m,m=0),w>=a&&_>0&&(v=!0,_*=.9,w=c*_);var g=(a-w)/2>>0,y={offset:g-m,size:0};f=u.reduce(function(k,P){var A={item:P.item,position:{offset:y.offset+y.size+m,size:v?_:P.barSize}},T=[].concat(Tw(k),[A]);return y=T[T.length-1].position,P.stackList&&P.stackList.length&&P.stackList.forEach(function(q){T.push({item:q,position:y})}),T},d)}else{var b=Ko(r,a,0,!0);a-2*b-(c-1)*m<=0&&(m=0);var O=(a-2*b-(c-1)*m)/c;O>1&&(O>>=0);var C=l===+l?Math.min(O,l):O;f=u.reduce(function(k,P,A){var T=[].concat(Tw(k),[{item:P.item,position:{offset:b+(O+m)*A+(O-C)/2,size:C}}]);return P.stackList&&P.stackList.length&&P.stackList.forEach(function(q){T.push({item:q,position:T[T.length-1].position})}),T},d)}return f},Vz=function(t,n,r,a){var i=r.children,u=r.width,l=r.margin,c=u-(l.left||0)-(l.right||0),m=PC({children:i,legendWidth:c});if(m){var f=a||{},d=f.width,v=f.height,_=m.align,w=m.verticalAlign,g=m.layout;if((g==="vertical"||g==="horizontal"&&w==="middle")&&_!=="center"&&ce(t[_]))return yt(yt({},t),{},Xi({},_,t[_]+(d||0)));if((g==="horizontal"||g==="vertical"&&_==="center")&&w!=="middle"&&ce(t[w]))return yt(yt({},t),{},Xi({},w,t[w]+(v||0)))}return t},Kz=function(t,n,r){return Re(n)?!0:t==="horizontal"?n==="yAxis":t==="vertical"||r==="x"?n==="xAxis":r==="y"?n==="yAxis":!0},OC=function(t,n,r,a,i){var u=n.props.children,l=Sn(u,Vs).filter(function(m){return Kz(a,i,m.props.direction)});if(l&&l.length){var c=l.map(function(m){return m.props.dataKey});return t.reduce(function(m,f){var d=Tt(f,r);if(Re(d))return m;var v=Array.isArray(d)?[O0(d),Qa(d)]:[d,d],_=c.reduce(function(w,g){var y=Tt(f,g,0),b=v[0]-Math.abs(Array.isArray(y)?y[0]:y),O=v[1]+Math.abs(Array.isArray(y)?y[1]:y);return[Math.min(b,w[0]),Math.max(O,w[1])]},[1/0,-1/0]);return[Math.min(_[0],m[0]),Math.max(_[1],m[1])]},[1/0,-1/0])}return null},Xz=function(t,n,r,a,i){var u=n.map(function(l){return OC(t,l,r,i,a)}).filter(function(l){return!Re(l)});return u&&u.length?u.reduce(function(l,c){return[Math.min(l[0],c[0]),Math.max(l[1],c[1])]},[1/0,-1/0]):null},kC=function(t,n,r,a,i){var u=n.map(function(c){var m=c.props.dataKey;return r==="number"&&m&&OC(t,c,m,a)||Ju(t,m,r,i)});if(r==="number")return u.reduce(function(c,m){return[Math.min(c[0],m[0]),Math.max(c[1],m[1])]},[1/0,-1/0]);var l={};return u.reduce(function(c,m){for(var f=0,d=m.length;f=2?mr(l[0]-l[1])*2*m:m,n&&(t.ticks||t.niceTicks)){var f=(t.ticks||t.niceTicks).map(function(d){var v=i?i.indexOf(d):d;return{coordinate:a(v)+m,value:d,offset:m}});return f.filter(function(d){return!Fs(d.coordinate)})}return t.isCategorical&&t.categoricalDomain?t.categoricalDomain.map(function(d,v){return{coordinate:a(d)+m,value:d,index:v,offset:m}}):a.ticks&&!r?a.ticks(t.tickCount).map(function(d){return{coordinate:a(d)+m,value:d,offset:m}}):a.domain().map(function(d,v){return{coordinate:a(d)+m,value:i?i[d]:d,index:v,offset:m}})},_9=new WeakMap,Rp=function(t,n){if(typeof n!="function")return t;_9.has(t)||_9.set(t,new WeakMap);var r=_9.get(t);if(r.has(n))return r.get(n);var a=function(){t.apply(void 0,arguments),n.apply(void 0,arguments)};return r.set(n,a),a},Yz=function(t,n,r){var a=t.scale,i=t.type,u=t.layout,l=t.axisType;if(a==="auto")return u==="radial"&&l==="radiusAxis"?{scale:hl(),realScaleType:"band"}:u==="radial"&&l==="angleAxis"?{scale:d1(),realScaleType:"linear"}:i==="category"&&n&&(n.indexOf("LineChart")>=0||n.indexOf("AreaChart")>=0||n.indexOf("ComposedChart")>=0&&!r)?{scale:Zu(),realScaleType:"point"}:i==="category"?{scale:hl(),realScaleType:"band"}:{scale:d1(),realScaleType:"linear"};if(Vo(a)){var c="scale".concat(p0(a));return{scale:(yw[c]||Zu)(),realScaleType:yw[c]?c:"point"}}return Ne(a)?{scale:a}:{scale:Zu(),realScaleType:"point"}},qw=1e-4,Qz=function(t){var n=t.domain();if(!(!n||n.length<=2)){var r=n.length,a=t.range(),i=Math.min(a[0],a[1])-qw,u=Math.max(a[0],a[1])+qw,l=t(n[0]),c=t(n[r-1]);(lu||cu)&&t.domain([n[0],n[r-1]])}},Zz=function(t,n){if(!t)return null;for(var r=0,a=t.length;ra)&&(i[1]=a),i[0]>a&&(i[0]=a),i[1]=0?(t[l][r][0]=i,t[l][r][1]=i+c,i=t[l][r][1]):(t[l][r][0]=u,t[l][r][1]=u+c,u=t[l][r][1])}},tU=function(t){var n=t.length;if(!(n<=0))for(var r=0,a=t[0].length;r=0?(t[u][r][0]=i,t[u][r][1]=i+l,i=t[u][r][1]):(t[u][r][0]=0,t[u][r][1]=0)}},nU={sign:eU,expand:$D,none:ss,silhouette:LD,wiggle:HD,positive:tU},rU=function(t,n,r){var a=n.map(function(l){return l.props.dataKey}),i=nU[r],u=DD().keys(a).value(function(l,c){return+Tt(l,c,0)}).order(y5).offset(i);return u(t)},aU=function(t,n,r,a,i,u){if(!t)return null;var l=u?n.reverse():n,c={},m=l.reduce(function(d,v){var _,w=(_=v.type)!==null&&_!==void 0&&_.defaultProps?yt(yt({},v.type.defaultProps),v.props):v.props,g=w.stackId,y=w.hide;if(y)return d;var b=w[r],O=d[b]||{hasStack:!1,stackGroups:{}};if(Rt(g)){var C=O.stackGroups[g]||{numericAxisId:r,cateAxisId:a,items:[]};C.items.push(v),O.hasStack=!0,O.stackGroups[g]=C}else O.stackGroups[ni("_stackId_")]={numericAxisId:r,cateAxisId:a,items:[v]};return yt(yt({},d),{},Xi({},b,O))},c),f={};return Object.keys(m).reduce(function(d,v){var _=m[v];if(_.hasStack){var w={};_.stackGroups=Object.keys(_.stackGroups).reduce(function(g,y){var b=_.stackGroups[y];return yt(yt({},g),{},Xi({},y,{numericAxisId:r,cateAxisId:a,items:b.items,stackedData:rU(t,b.items,i)}))},w)}return yt(yt({},d),{},Xi({},v,_))},f)},oU=function(t,n){var r=n.realScaleType,a=n.type,i=n.tickCount,u=n.originalDomain,l=n.allowDecimals,c=r||n.scale;if(c!=="auto"&&c!=="linear")return null;if(i&&a==="number"&&u&&(u[0]==="auto"||u[1]==="auto")){var m=t.domain();if(!m.length)return null;var f=hz(m,i,l);return t.domain([O0(f),Qa(f)]),{niceTicks:f}}if(i&&a==="number"){var d=t.domain(),v=yz(d,i,l);return{niceTicks:v}}return null};function hs(e){var t=e.axis,n=e.ticks,r=e.bandSize,a=e.entry,i=e.index,u=e.dataKey;if(t.type==="category"){if(!t.allowDuplicatedCategory&&t.dataKey&&!Re(a[t.dataKey])){var l=Vp(n,"value",a[t.dataKey]);if(l)return l.coordinate+r/2}return n[i]?n[i].coordinate+r/2:null}var c=Tt(a,Re(u)?t.dataKey:u);return Re(c)?null:t.scale(c)}var jw=function(t){var n=t.axis,r=t.ticks,a=t.offset,i=t.bandSize,u=t.entry,l=t.index;if(n.type==="category")return r[l]?r[l].coordinate+a:null;var c=Tt(u,n.dataKey,n.domain[l]);return Re(c)?null:n.scale(c)-i/2+a},iU=function(t){var n=t.numericAxis,r=n.scale.domain();if(n.type==="number"){var a=Math.min(r[0],r[1]),i=Math.max(r[0],r[1]);return a<=0&&i>=0?0:i<0?i:a}return r[0]},sU=function(t,n){var r,a=(r=t.type)!==null&&r!==void 0&&r.defaultProps?yt(yt({},t.type.defaultProps),t.props):t.props,i=a.stackId;if(Rt(i)){var u=n[i];if(u){var l=u.items.indexOf(t);return l>=0?u.stackedData[l]:null}}return null},uU=function(t){return t.reduce(function(n,r){return[O0(r.concat([n[0]]).filter(ce)),Qa(r.concat([n[1]]).filter(ce))]},[1/0,-1/0])},EC=function(t,n,r){return Object.keys(t).reduce(function(a,i){var u=t[i],l=u.stackedData,c=l.reduce(function(m,f){var d=uU(f.slice(n,r+1));return[Math.min(m[0],d[0]),Math.max(m[1],d[1])]},[1/0,-1/0]);return[Math.min(c[0],a[0]),Math.max(c[1],a[1])]},[1/0,-1/0]).map(function(a){return a===1/0||a===-1/0?0:a})},Mw=/^dataMin[\s]*-[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,Iw=/^dataMax[\s]*\+[\s]*([0-9]+([.]{1}[0-9]+){0,1})$/,F5=function(t,n,r){if(Ne(t))return t(n,r);if(!Array.isArray(t))return n;var a=[];if(ce(t[0]))a[0]=r?t[0]:Math.min(t[0],n[0]);else if(Mw.test(t[0])){var i=+Mw.exec(t[0])[1];a[0]=n[0]-i}else Ne(t[0])?a[0]=t[0](n[0]):a[0]=n[0];if(ce(t[1]))a[1]=r?t[1]:Math.max(t[1],n[1]);else if(Iw.test(t[1])){var u=+Iw.exec(t[1])[1];a[1]=n[1]+u}else Ne(t[1])?a[1]=t[1](n[1]):a[1]=n[1];return a},x1=function(t,n,r){if(t&&t.scale&&t.scale.bandwidth){var a=t.scale.bandwidth();if(!r||a>0)return a}if(t&&n&&n.length>=2){for(var i=y2(n,function(d){return d.coordinate}),u=1/0,l=1,c=i.length;lu&&(m=2*Math.PI-m),{radius:l,angle:mU(m),angleInRadian:m}},vU=function(t){var n=t.startAngle,r=t.endAngle,a=Math.floor(n/360),i=Math.floor(r/360),u=Math.min(a,i);return{startAngle:n-u*360,endAngle:r-u*360}},hU=function(t,n){var r=n.startAngle,a=n.endAngle,i=Math.floor(r/360),u=Math.floor(a/360),l=Math.min(i,u);return t+l*360},Hw=function(t,n){var r=t.x,a=t.y,i=fU({x:r,y:a},n),u=i.radius,l=i.angle,c=n.innerRadius,m=n.outerRadius;if(um)return!1;if(u===0)return!0;var f=vU(n),d=f.startAngle,v=f.endAngle,_=l,w;if(d<=v){for(;_>v;)_-=360;for(;_=d&&_<=v}else{for(;_>d;)_-=360;for(;_=v&&_<=d}return w?Lw(Lw({},n),{},{radius:u,angle:hU(_,n)}):null};function kl(e){"@babel/helpers - typeof";return kl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},kl(e)}var yU=["offset"];function _U(e){return bU(e)||wU(e)||xU(e)||gU()}function gU(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function xU(e,t){if(e){if(typeof e=="string")return B5(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return B5(e,t)}}function wU(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function bU(e){if(Array.isArray(e))return B5(e)}function B5(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function PU(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function Gw(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Et(e){for(var t=1;t=0?1:-1,C,k;a==="insideStart"?(C=_+O*u,k=g):a==="insideEnd"?(C=w-O*u,k=!g):a==="end"&&(C=w+O*u,k=g),k=b<=0?k:!k;var P=Wt(m,f,y,C),A=Wt(m,f,y,C+(k?1:-1)*359),T="M".concat(P.x,",").concat(P.y,` + A`).concat(y,",").concat(y,",0,1,").concat(k?0:1,`, + `).concat(A.x,",").concat(A.y),q=Re(t.id)?ni("recharts-radial-line-"):t.id;return L.createElement("text",Cl({},r,{dominantBaseline:"central",className:Ie("recharts-radial-bar-label",l)}),L.createElement("defs",null,L.createElement("path",{id:q,d:T})),L.createElement("textPath",{xlinkHref:"#".concat(q)},n))},TU=function(t){var n=t.viewBox,r=t.offset,a=t.position,i=n,u=i.cx,l=i.cy,c=i.innerRadius,m=i.outerRadius,f=i.startAngle,d=i.endAngle,v=(f+d)/2;if(a==="outside"){var _=Wt(u,l,m+r,v),w=_.x,g=_.y;return{x:w,y:g,textAnchor:w>=u?"start":"end",verticalAnchor:"middle"}}if(a==="center")return{x:u,y:l,textAnchor:"middle",verticalAnchor:"middle"};if(a==="centerTop")return{x:u,y:l,textAnchor:"middle",verticalAnchor:"start"};if(a==="centerBottom")return{x:u,y:l,textAnchor:"middle",verticalAnchor:"end"};var y=(c+m)/2,b=Wt(u,l,y,v),O=b.x,C=b.y;return{x:O,y:C,textAnchor:"middle",verticalAnchor:"middle"}},NU=function(t){var n=t.viewBox,r=t.parentViewBox,a=t.offset,i=t.position,u=n,l=u.x,c=u.y,m=u.width,f=u.height,d=f>=0?1:-1,v=d*a,_=d>0?"end":"start",w=d>0?"start":"end",g=m>=0?1:-1,y=g*a,b=g>0?"end":"start",O=g>0?"start":"end";if(i==="top"){var C={x:l+m/2,y:c-d*a,textAnchor:"middle",verticalAnchor:_};return Et(Et({},C),r?{height:Math.max(c-r.y,0),width:m}:{})}if(i==="bottom"){var k={x:l+m/2,y:c+f+v,textAnchor:"middle",verticalAnchor:w};return Et(Et({},k),r?{height:Math.max(r.y+r.height-(c+f),0),width:m}:{})}if(i==="left"){var P={x:l-y,y:c+f/2,textAnchor:b,verticalAnchor:"middle"};return Et(Et({},P),r?{width:Math.max(P.x-r.x,0),height:f}:{})}if(i==="right"){var A={x:l+m+y,y:c+f/2,textAnchor:O,verticalAnchor:"middle"};return Et(Et({},A),r?{width:Math.max(r.x+r.width-A.x,0),height:f}:{})}var T=r?{width:m,height:f}:{};return i==="insideLeft"?Et({x:l+y,y:c+f/2,textAnchor:O,verticalAnchor:"middle"},T):i==="insideRight"?Et({x:l+m-y,y:c+f/2,textAnchor:b,verticalAnchor:"middle"},T):i==="insideTop"?Et({x:l+m/2,y:c+v,textAnchor:"middle",verticalAnchor:w},T):i==="insideBottom"?Et({x:l+m/2,y:c+f-v,textAnchor:"middle",verticalAnchor:_},T):i==="insideTopLeft"?Et({x:l+y,y:c+v,textAnchor:O,verticalAnchor:w},T):i==="insideTopRight"?Et({x:l+m-y,y:c+v,textAnchor:b,verticalAnchor:w},T):i==="insideBottomLeft"?Et({x:l+y,y:c+f-v,textAnchor:O,verticalAnchor:_},T):i==="insideBottomRight"?Et({x:l+m-y,y:c+f-v,textAnchor:b,verticalAnchor:_},T):Gs(i)&&(ce(i.x)||Ro(i.x))&&(ce(i.y)||Ro(i.y))?Et({x:l+Ko(i.x,m),y:c+Ko(i.y,f),textAnchor:"end",verticalAnchor:"end"},T):Et({x:l+m/2,y:c+f/2,textAnchor:"middle",verticalAnchor:"middle"},T)},qU=function(t){return"cx"in t&&ce(t.cx)};function an(e){var t=e.offset,n=t===void 0?5:t,r=SU(e,yU),a=Et({offset:n},r),i=a.viewBox,u=a.position,l=a.value,c=a.children,m=a.content,f=a.className,d=f===void 0?"":f,v=a.textBreakAll;if(!i||Re(l)&&Re(c)&&!R.isValidElement(m)&&!Ne(m))return null;if(R.isValidElement(m))return R.cloneElement(m,a);var _;if(Ne(m)){if(_=R.createElement(m,a),R.isValidElement(_))return _}else _=AU(a);var w=qU(i),g=Te(a,!0);if(w&&(u==="insideStart"||u==="insideEnd"||u==="end"))return RU(a,_,g);var y=w?TU(a):NU(a);return L.createElement(o1,Cl({className:Ie("recharts-label",d)},g,y,{breakAll:v}),_)}an.displayName="Label";var TC=function(t){var n=t.cx,r=t.cy,a=t.angle,i=t.startAngle,u=t.endAngle,l=t.r,c=t.radius,m=t.innerRadius,f=t.outerRadius,d=t.x,v=t.y,_=t.top,w=t.left,g=t.width,y=t.height,b=t.clockWise,O=t.labelViewBox;if(O)return O;if(ce(g)&&ce(y)){if(ce(d)&&ce(v))return{x:d,y:v,width:g,height:y};if(ce(_)&&ce(w))return{x:_,y:w,width:g,height:y}}return ce(d)&&ce(v)?{x:d,y:v,width:0,height:0}:ce(n)&&ce(r)?{cx:n,cy:r,startAngle:i||a||0,endAngle:u||a||0,innerRadius:m||0,outerRadius:f||c||l||0,clockWise:b}:t.viewBox?t.viewBox:{}},jU=function(t,n){return t?t===!0?L.createElement(an,{key:"label-implicit",viewBox:n}):Rt(t)?L.createElement(an,{key:"label-implicit",viewBox:n,value:t}):R.isValidElement(t)?t.type===an?R.cloneElement(t,{key:"label-implicit",viewBox:n}):L.createElement(an,{key:"label-implicit",content:t,viewBox:n}):Ne(t)?L.createElement(an,{key:"label-implicit",content:t,viewBox:n}):Gs(t)?L.createElement(an,Cl({viewBox:n},t,{key:"label-implicit"})):null:null},MU=function(t,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!t||!t.children&&r&&!t.label)return null;var a=t.children,i=TC(t),u=Sn(a,an).map(function(c,m){return R.cloneElement(c,{viewBox:n||i,key:"label-".concat(m)})});if(!r)return u;var l=jU(t.label,n||i);return[l].concat(_U(u))};an.parseViewBox=TC;an.renderCallByParent=MU;var g9,Fw;function IU(){if(Fw)return g9;Fw=1;function e(t){var n=t==null?0:t.length;return n?t[n-1]:void 0}return g9=e,g9}var DU=IU();const $U=tt(DU);function Al(e){"@babel/helpers - typeof";return Al=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Al(e)}var LU=["valueAccessor"],HU=["data","dataKey","clockWise","id","textBreakAll"];function GU(e){return UU(e)||zU(e)||BU(e)||FU()}function FU(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function BU(e,t){if(e){if(typeof e=="string")return z5(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return z5(e,t)}}function zU(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function UU(e){if(Array.isArray(e))return z5(e)}function z5(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function XU(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var YU=function(t){return Array.isArray(t.value)?$U(t.value):t.value};function Ir(e){var t=e.valueAccessor,n=t===void 0?YU:t,r=Uw(e,LU),a=r.data,i=r.dataKey,u=r.clockWise,l=r.id,c=r.textBreakAll,m=Uw(r,HU);return!a||!a.length?null:L.createElement(Be,{className:"recharts-label-list"},a.map(function(f,d){var v=Re(i)?n(f,d):Tt(f&&f.payload,i),_=Re(l)?{}:{id:"".concat(l,"-").concat(d)};return L.createElement(an,b1({},Te(f,!0),m,_,{parentViewBox:f.parentViewBox,value:v,textBreakAll:c,viewBox:an.parseViewBox(Re(u)?f:zw(zw({},f),{},{clockWise:u})),key:"label-".concat(d),index:d}))}))}Ir.displayName="LabelList";function QU(e,t){return e?e===!0?L.createElement(Ir,{key:"labelList-implicit",data:t}):L.isValidElement(e)||Ne(e)?L.createElement(Ir,{key:"labelList-implicit",data:t,content:e}):Gs(e)?L.createElement(Ir,b1({data:t},e,{key:"labelList-implicit"})):null:null}function ZU(e,t){var n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!0;if(!e||!e.children&&n&&!e.label)return null;var r=e.children,a=Sn(r,Ir).map(function(u,l){return R.cloneElement(u,{data:t,key:"labelList-".concat(l)})});if(!n)return a;var i=QU(e.label,t);return[i].concat(GU(a))}Ir.renderCallByParent=ZU;function El(e){"@babel/helpers - typeof";return El=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},El(e)}function U5(){return U5=Object.assign?Object.assign.bind():function(e){for(var t=1;t180),",").concat(+(u>m),`, + `).concat(d.x,",").concat(d.y,` + `);if(a>0){var _=Wt(n,r,a,u),w=Wt(n,r,a,m);v+="L ".concat(w.x,",").concat(w.y,` A `).concat(a,",").concat(a,`,0, - `).concat(+(Math.abs(u)>180),",").concat(+(i<=l),`, - `).concat(d.x,",").concat(d.y," Z")}else m+="L ".concat(n,",").concat(r," Z");return m},ZQ=function(t){var n=t.cx,r=t.cy,a=t.innerRadius,o=t.outerRadius,i=t.cornerRadius,s=t.forceCornerRadius,u=t.cornerIsExternal,l=t.startAngle,p=t.endAngle,c=In(p-l),m=wc({cx:n,cy:r,radius:o,angle:l,sign:c,cornerRadius:i,cornerIsExternal:u}),d=m.circleTangency,g=m.lineTangency,f=m.theta,y=wc({cx:n,cy:r,radius:o,angle:p,sign:-c,cornerRadius:i,cornerIsExternal:u}),v=y.circleTangency,h=y.lineTangency,_=y.theta,w=u?Math.abs(l-p):Math.abs(l-p)-f-_;if(w<0)return s?"M ".concat(g.x,",").concat(g.y,` - a`).concat(i,",").concat(i,",0,0,1,").concat(i*2,`,0 - a`).concat(i,",").concat(i,",0,0,1,").concat(-i*2,`,0 - `):Gb({cx:n,cy:r,innerRadius:a,outerRadius:o,startAngle:l,endAngle:p});var x="M ".concat(g.x,",").concat(g.y,` - A`).concat(i,",").concat(i,",0,0,").concat(+(c<0),",").concat(d.x,",").concat(d.y,` - A`).concat(o,",").concat(o,",0,").concat(+(w>180),",").concat(+(c<0),",").concat(v.x,",").concat(v.y,` - A`).concat(i,",").concat(i,",0,0,").concat(+(c<0),",").concat(h.x,",").concat(h.y,` - `);if(a>0){var S=wc({cx:n,cy:r,radius:a,angle:l,sign:c,isExternal:!0,cornerRadius:i,cornerIsExternal:u}),O=S.circleTangency,k=S.lineTangency,C=S.theta,N=wc({cx:n,cy:r,radius:a,angle:p,sign:-c,isExternal:!0,cornerRadius:i,cornerIsExternal:u}),T=N.circleTangency,A=N.lineTangency,$=N.theta,R=u?Math.abs(l-p):Math.abs(l-p)-C-$;if(R<0&&i===0)return"".concat(x,"L").concat(n,",").concat(r,"Z");x+="L".concat(A.x,",").concat(A.y,` - A`).concat(i,",").concat(i,",0,0,").concat(+(c<0),",").concat(T.x,",").concat(T.y,` - A`).concat(a,",").concat(a,",0,").concat(+(R>180),",").concat(+(c>0),",").concat(O.x,",").concat(O.y,` - A`).concat(i,",").concat(i,",0,0,").concat(+(c<0),",").concat(k.x,",").concat(k.y,"Z")}else x+="L".concat(n,",").concat(r,"Z");return x},JQ={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},Bb=function(t){var n=$6($6({},JQ),t),r=n.cx,a=n.cy,o=n.innerRadius,i=n.outerRadius,s=n.cornerRadius,u=n.forceCornerRadius,l=n.cornerIsExternal,p=n.startAngle,c=n.endAngle,m=n.className;if(i0&&Math.abs(p-c)<360?y=ZQ({cx:r,cy:a,innerRadius:o,outerRadius:i,cornerRadius:Math.min(f,g/2),forceCornerRadius:u,cornerIsExternal:l,startAngle:p,endAngle:c}):y=Gb({cx:r,cy:a,innerRadius:o,outerRadius:i,startAngle:p,endAngle:c}),E.createElement("path",rf({},ae(n,!0),{className:d,d:y,role:"img"}))};function sl(e){"@babel/helpers - typeof";return sl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},sl(e)}function af(){return af=Object.assign?Object.assign.bind():function(e){for(var t=1;tmZ.call(e,t));function Io(e,t){return e===t||!e&&!t&&e!==e&&t!==t}const vZ="__v",hZ="__o",yZ="_owner",{getOwnPropertyDescriptor:L6,keys:H6}=Object;function gZ(e,t){return e.byteLength===t.byteLength&&r0(new Uint8Array(e),new Uint8Array(t))}function _Z(e,t,n){let r=e.length;if(t.length!==r)return!1;for(;r-- >0;)if(!n.equals(e[r],t[r],r,r,e,t,n))return!1;return!0}function xZ(e,t){return e.byteLength===t.byteLength&&r0(new Uint8Array(e.buffer,e.byteOffset,e.byteLength),new Uint8Array(t.buffer,t.byteOffset,t.byteLength))}function wZ(e,t){return Io(e.getTime(),t.getTime())}function bZ(e,t){return e.name===t.name&&e.message===t.message&&e.cause===t.cause&&e.stack===t.stack}function SZ(e,t){return e===t}function G6(e,t,n){const r=e.size;if(r!==t.size)return!1;if(!r)return!0;const a=new Array(r),o=e.entries();let i,s,u=0;for(;(i=o.next())&&!i.done;){const l=t.entries();let p=!1,c=0;for(;(s=l.next())&&!s.done;){if(a[c]){c++;continue}const m=i.value,d=s.value;if(n.equals(m[0],d[0],u,c,e,t,n)&&n.equals(m[1],d[1],m[0],d[0],e,t,n)){p=a[c]=!0;break}c++}if(!p)return!1;u++}return!0}const PZ=Io;function OZ(e,t,n){const r=H6(e);let a=r.length;if(H6(t).length!==a)return!1;for(;a-- >0;)if(!Wb(e,t,n,r[a]))return!1;return!0}function Qs(e,t,n){const r=D6(e);let a=r.length;if(D6(t).length!==a)return!1;let o,i,s;for(;a-- >0;)if(o=r[a],!Wb(e,t,n,o)||(i=L6(e,o),s=L6(t,o),(i||s)&&(!i||!s||i.configurable!==s.configurable||i.enumerable!==s.enumerable||i.writable!==s.writable)))return!1;return!0}function kZ(e,t){return Io(e.valueOf(),t.valueOf())}function CZ(e,t){return e.source===t.source&&e.flags===t.flags}function B6(e,t,n){const r=e.size;if(r!==t.size)return!1;if(!r)return!0;const a=new Array(r),o=e.values();let i,s;for(;(i=o.next())&&!i.done;){const u=t.values();let l=!1,p=0;for(;(s=u.next())&&!s.done;){if(!a[p]&&n.equals(i.value,s.value,i.value,s.value,e,t,n)){l=a[p]=!0;break}p++}if(!l)return!1}return!0}function r0(e,t){let n=e.byteLength;if(t.byteLength!==n||e.byteOffset!==t.byteOffset)return!1;for(;n-- >0;)if(e[n]!==t[n])return!1;return!0}function AZ(e,t){return e.hostname===t.hostname&&e.pathname===t.pathname&&e.protocol===t.protocol&&e.port===t.port&&e.hash===t.hash&&e.username===t.username&&e.password===t.password}function Wb(e,t,n,r){return(r===yZ||r===hZ||r===vZ)&&(e.$$typeof||t.$$typeof)?!0:fZ(t,r)&&n.equals(e[r],t[r],r,r,e,t,n)}const EZ="[object ArrayBuffer]",NZ="[object Arguments]",TZ="[object Boolean]",jZ="[object DataView]",RZ="[object Date]",$Z="[object Error]",MZ="[object Map]",qZ="[object Number]",IZ="[object Object]",DZ="[object RegExp]",LZ="[object Set]",HZ="[object String]",GZ={"[object Int8Array]":!0,"[object Uint8Array]":!0,"[object Uint8ClampedArray]":!0,"[object Int16Array]":!0,"[object Uint16Array]":!0,"[object Int32Array]":!0,"[object Uint32Array]":!0,"[object Float16Array]":!0,"[object Float32Array]":!0,"[object Float64Array]":!0,"[object BigInt64Array]":!0,"[object BigUint64Array]":!0},BZ="[object URL]",FZ=Object.prototype.toString;function zZ({areArrayBuffersEqual:e,areArraysEqual:t,areDataViewsEqual:n,areDatesEqual:r,areErrorsEqual:a,areFunctionsEqual:o,areMapsEqual:i,areNumbersEqual:s,areObjectsEqual:u,arePrimitiveWrappersEqual:l,areRegExpsEqual:p,areSetsEqual:c,areTypedArraysEqual:m,areUrlsEqual:d,unknownTagComparators:g}){return function(y,v,h){if(y===v)return!0;if(y==null||v==null)return!1;const _=typeof y;if(_!==typeof v)return!1;if(_!=="object")return _==="number"?s(y,v,h):_==="function"?o(y,v,h):!1;const w=y.constructor;if(w!==v.constructor)return!1;if(w===Object)return u(y,v,h);if(Array.isArray(y))return t(y,v,h);if(w===Date)return r(y,v,h);if(w===RegExp)return p(y,v,h);if(w===Map)return i(y,v,h);if(w===Set)return c(y,v,h);const x=FZ.call(y);if(x===RZ)return r(y,v,h);if(x===DZ)return p(y,v,h);if(x===MZ)return i(y,v,h);if(x===LZ)return c(y,v,h);if(x===IZ)return typeof y.then!="function"&&typeof v.then!="function"&&u(y,v,h);if(x===BZ)return d(y,v,h);if(x===$Z)return a(y,v,h);if(x===NZ)return u(y,v,h);if(GZ[x])return m(y,v,h);if(x===EZ)return e(y,v,h);if(x===jZ)return n(y,v,h);if(x===TZ||x===qZ||x===HZ)return l(y,v,h);if(g){let S=g[x];if(!S){const O=dZ(y);O&&(S=g[O])}if(S)return S(y,v,h)}return!1}}function UZ({circular:e,createCustomConfig:t,strict:n}){let r={areArrayBuffersEqual:gZ,areArraysEqual:n?Qs:_Z,areDataViewsEqual:xZ,areDatesEqual:wZ,areErrorsEqual:bZ,areFunctionsEqual:SZ,areMapsEqual:n?td(G6,Qs):G6,areNumbersEqual:PZ,areObjectsEqual:n?Qs:OZ,arePrimitiveWrappersEqual:kZ,areRegExpsEqual:CZ,areSetsEqual:n?td(B6,Qs):B6,areTypedArraysEqual:n?td(r0,Qs):r0,areUrlsEqual:AZ,unknownTagComparators:void 0};if(t&&(r=Object.assign({},r,t(r))),e){const a=Sc(r.areArraysEqual),o=Sc(r.areMapsEqual),i=Sc(r.areObjectsEqual),s=Sc(r.areSetsEqual);r=Object.assign({},r,{areArraysEqual:a,areMapsEqual:o,areObjectsEqual:i,areSetsEqual:s})}return r}function WZ(e){return function(t,n,r,a,o,i,s){return e(t,n,s)}}function VZ({circular:e,comparator:t,createState:n,equals:r,strict:a}){if(n)return function(s,u){const{cache:l=e?new WeakMap:void 0,meta:p}=n();return t(s,u,{cache:l,equals:r,meta:p,strict:a})};if(e)return function(s,u){return t(s,u,{cache:new WeakMap,equals:r,meta:void 0,strict:a})};const o={cache:void 0,equals:r,meta:void 0,strict:a};return function(s,u){return t(s,u,o)}}const KZ=Ga();Ga({strict:!0});Ga({circular:!0});Ga({circular:!0,strict:!0});Ga({createInternalComparator:()=>Io});Ga({strict:!0,createInternalComparator:()=>Io});Ga({circular:!0,createInternalComparator:()=>Io});Ga({circular:!0,createInternalComparator:()=>Io,strict:!0});function Ga(e={}){const{circular:t=!1,createInternalComparator:n,createState:r,strict:a=!1}=e,o=UZ(e),i=zZ(o),s=n?n(i):WZ(i);return VZ({circular:t,comparator:i,createState:r,equals:s,strict:a})}function XZ(e){typeof requestAnimationFrame<"u"&&requestAnimationFrame(e)}function F6(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=-1,r=function a(o){n<0&&(n=o),o-n>t?(e(o),n=-1):XZ(a)};requestAnimationFrame(r)}function of(e){"@babel/helpers - typeof";return of=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},of(e)}function YZ(e){return eJ(e)||JZ(e)||ZZ(e)||QZ()}function QZ(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function ZZ(e,t){if(e){if(typeof e=="string")return z6(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return z6(e,t)}}function z6(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n1?1:v<0?0:v},f=function(v){for(var h=v>1?1:v,_=h,w=0;w<8;++w){var x=c(_)-h,S=d(_);if(Math.abs(x-h)0&&arguments[0]!==void 0?arguments[0]:{},n=t.stiff,r=n===void 0?100:n,a=t.damping,o=a===void 0?8:a,i=t.dt,s=i===void 0?17:i,u=function(p,c,m){var d=-(p-c)*r,g=m*o,f=m+(d-g)*s/1e3,y=m*s/1e3+p;return Math.abs(y-c)e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function TJ(e,t){if(e==null)return{};var n={},r=Object.keys(e),a,o;for(o=0;o=0)&&(n[a]=e[a]);return n}function nd(e){return MJ(e)||$J(e)||RJ(e)||jJ()}function jJ(){throw new TypeError(`Invalid attempt to spread non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function RJ(e,t){if(e){if(typeof e=="string")return pf(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return pf(e,t)}}function $J(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function MJ(e){if(Array.isArray(e))return pf(e)}function pf(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function i0(e){return i0=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},i0(e)}var Vn=function(e){HJ(n,e);var t=GJ(n);function n(r,a){var o;qJ(this,n),o=t.call(this,r,a);var i=o.props,s=i.isActive,u=i.attributeName,l=i.from,p=i.to,c=i.steps,m=i.children,d=i.duration;if(o.handleStyleChange=o.handleStyleChange.bind(ff(o)),o.changeStyle=o.changeStyle.bind(ff(o)),!s||d<=0)return o.state={style:{}},typeof m=="function"&&(o.state={style:p}),df(o);if(c&&c.length)o.state={style:c[0].style};else if(l){if(typeof m=="function")return o.state={style:l},df(o);o.state={style:u?au({},u,l):l}}else o.state={style:{}};return o}return DJ(n,[{key:"componentDidMount",value:function(){var a=this.props,o=a.isActive,i=a.canBegin;this.mounted=!0,!(!o||!i)&&this.runAnimation(this.props)}},{key:"componentDidUpdate",value:function(a){var o=this.props,i=o.isActive,s=o.canBegin,u=o.attributeName,l=o.shouldReAnimate,p=o.to,c=o.from,m=this.state.style;if(s){if(!i){var d={style:u?au({},u,p):p};this.state&&m&&(u&&m[u]!==p||!u&&m!==p)&&this.setState(d);return}if(!(KZ(a.to,p)&&a.canBegin&&a.isActive)){var g=!a.canBegin||!a.isActive;this.manager&&this.manager.stop(),this.stopJSAnimation&&this.stopJSAnimation();var f=g||l?c:a.to;if(this.state&&m){var y={style:u?au({},u,f):f};(u&&m[u]!==f||!u&&m!==f)&&this.setState(y)}this.runAnimation(Cn(Cn({},this.props),{},{from:f,begin:0}))}}}},{key:"componentWillUnmount",value:function(){this.mounted=!1;var a=this.props.onAnimationEnd;this.unSubscribe&&this.unSubscribe(),this.manager&&(this.manager.stop(),this.manager=null),this.stopJSAnimation&&this.stopJSAnimation(),a&&a()}},{key:"handleStyleChange",value:function(a){this.changeStyle(a)}},{key:"changeStyle",value:function(a){this.mounted&&this.setState({style:a})}},{key:"runJSAnimation",value:function(a){var o=this,i=a.from,s=a.to,u=a.duration,l=a.easing,p=a.begin,c=a.onAnimationEnd,m=a.onAnimationStart,d=AJ(i,s,yJ(l),u,this.changeStyle),g=function(){o.stopJSAnimation=d()};this.manager.start([m,p,g,u,c])}},{key:"runStepAnimation",value:function(a){var o=this,i=a.steps,s=a.begin,u=a.onAnimationStart,l=i[0],p=l.style,c=l.duration,m=c===void 0?0:c,d=function(f,y,v){if(v===0)return f;var h=y.duration,_=y.easing,w=_===void 0?"ease":_,x=y.style,S=y.properties,O=y.onAnimationEnd,k=v>0?i[v-1]:y,C=S||Object.keys(x);if(typeof w=="function"||w==="spring")return[].concat(nd(f),[o.runJSAnimation.bind(o,{from:k.style,to:x,duration:h,easing:w}),h]);var N=V6(C,h,w),T=Cn(Cn(Cn({},k.style),x),{},{transition:N});return[].concat(nd(f),[T,h,O]).filter(oJ)};return this.manager.start([u].concat(nd(i.reduce(d,[p,Math.max(m,s)])),[a.onAnimationEnd]))}},{key:"runAnimation",value:function(a){this.manager||(this.manager=tJ());var o=a.begin,i=a.duration,s=a.attributeName,u=a.to,l=a.easing,p=a.onAnimationStart,c=a.onAnimationEnd,m=a.steps,d=a.children,g=this.manager;if(this.unSubscribe=g.subscribe(this.handleStyleChange),typeof l=="function"||typeof d=="function"||l==="spring"){this.runJSAnimation(a);return}if(m.length>1){this.runStepAnimation(a);return}var f=s?au({},s,u):u,y=V6(Object.keys(f),i,l);g.start([p,o,Cn(Cn({},f),{},{transition:y}),i,c])}},{key:"render",value:function(){var a=this.props,o=a.children;a.begin;var i=a.duration;a.attributeName,a.easing;var s=a.isActive;a.steps,a.from,a.to,a.canBegin,a.onAnimationEnd,a.shouldReAnimate,a.onAnimationReStart;var u=NJ(a,EJ),l=P.Children.count(o),p=this.state.style;if(typeof o=="function")return o(p);if(!s||l===0||i<=0)return o;var c=function(d){var g=d.props,f=g.style,y=f===void 0?{}:f,v=g.className,h=P.cloneElement(d,Cn(Cn({},u),{},{style:Cn(Cn({},y),p),className:v}));return h};return l===1?c(P.Children.only(o)):E.createElement("div",null,P.Children.map(o,function(m){return c(m)}))}}]),n}(P.PureComponent);Vn.displayName="Animate";Vn.defaultProps={begin:0,duration:1e3,from:"",to:"",attributeName:"",easing:"ease",isActive:!0,canBegin:!0,steps:[],onAnimationEnd:function(){},onAnimationStart:function(){}};Vn.propTypes={from:ge.oneOfType([ge.object,ge.string]),to:ge.oneOfType([ge.object,ge.string]),attributeName:ge.string,duration:ge.number,begin:ge.number,easing:ge.oneOfType([ge.string,ge.func]),steps:ge.arrayOf(ge.shape({duration:ge.number.isRequired,style:ge.object.isRequired,easing:ge.oneOfType([ge.oneOf(["ease","ease-in","ease-out","ease-in-out","linear"]),ge.func]),properties:ge.arrayOf("string"),onAnimationEnd:ge.func})),children:ge.oneOfType([ge.node,ge.func]),isActive:ge.bool,canBegin:ge.bool,onAnimationEnd:ge.func,shouldReAnimate:ge.bool,onAnimationStart:ge.func,onAnimationReStart:ge.func};function cl(e){"@babel/helpers - typeof";return cl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},cl(e)}function s0(){return s0=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0?1:-1,u=r>=0?1:-1,l=a>=0&&r>=0||a<0&&r<0?1:0,p;if(i>0&&o instanceof Array){for(var c=[0,0,0,0],m=0,d=4;mi?i:o[m];p="M".concat(t,",").concat(n+s*c[0]),c[0]>0&&(p+="A ".concat(c[0],",").concat(c[0],",0,0,").concat(l,",").concat(t+u*c[0],",").concat(n)),p+="L ".concat(t+r-u*c[1],",").concat(n),c[1]>0&&(p+="A ".concat(c[1],",").concat(c[1],",0,0,").concat(l,`, - `).concat(t+r,",").concat(n+s*c[1])),p+="L ".concat(t+r,",").concat(n+a-s*c[2]),c[2]>0&&(p+="A ".concat(c[2],",").concat(c[2],",0,0,").concat(l,`, - `).concat(t+r-u*c[2],",").concat(n+a)),p+="L ".concat(t+u*c[3],",").concat(n+a),c[3]>0&&(p+="A ".concat(c[3],",").concat(c[3],",0,0,").concat(l,`, - `).concat(t,",").concat(n+a-s*c[3])),p+="Z"}else if(i>0&&o===+o&&o>0){var g=Math.min(i,o);p="M ".concat(t,",").concat(n+s*g,` - A `).concat(g,",").concat(g,",0,0,").concat(l,",").concat(t+u*g,",").concat(n,` - L `).concat(t+r-u*g,",").concat(n,` - A `).concat(g,",").concat(g,",0,0,").concat(l,",").concat(t+r,",").concat(n+s*g,` - L `).concat(t+r,",").concat(n+a-s*g,` - A `).concat(g,",").concat(g,",0,0,").concat(l,",").concat(t+r-u*g,",").concat(n+a,` - L `).concat(t+u*g,",").concat(n+a,` - A `).concat(g,",").concat(g,",0,0,").concat(l,",").concat(t,",").concat(n+a-s*g," Z")}else p="M ".concat(t,",").concat(n," h ").concat(r," v ").concat(a," h ").concat(-r," Z");return p},QJ=function(t,n){if(!t||!n)return!1;var r=t.x,a=t.y,o=n.x,i=n.y,s=n.width,u=n.height;if(Math.abs(s)>0&&Math.abs(u)>0){var l=Math.min(o,o+s),p=Math.max(o,o+s),c=Math.min(i,i+u),m=Math.max(i,i+u);return r>=l&&r<=p&&a>=c&&a<=m}return!1},ZJ={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},J9=function(t){var n=ty(ty({},ZJ),t),r=P.useRef(),a=P.useState(-1),o=FJ(a,2),i=o[0],s=o[1];P.useEffect(function(){if(r.current&&r.current.getTotalLength)try{var w=r.current.getTotalLength();w&&s(w)}catch{}},[]);var u=n.x,l=n.y,p=n.width,c=n.height,m=n.radius,d=n.className,g=n.animationEasing,f=n.animationDuration,y=n.animationBegin,v=n.isAnimationActive,h=n.isUpdateAnimationActive;if(u!==+u||l!==+l||p!==+p||c!==+c||p===0||c===0)return null;var _=le("recharts-rectangle",d);return h?E.createElement(Vn,{canBegin:i>0,from:{width:p,height:c,x:u,y:l},to:{width:p,height:c,x:u,y:l},duration:f,animationEasing:g,isActive:h},function(w){var x=w.width,S=w.height,O=w.x,k=w.y;return E.createElement(Vn,{canBegin:i>0,from:"0px ".concat(i===-1?1:i,"px"),to:"".concat(i,"px 0px"),attributeName:"strokeDasharray",begin:y,duration:f,isActive:v,easing:g},E.createElement("path",s0({},ae(n,!0),{className:_,d:ny(O,k,x,S,m),ref:r})))}):E.createElement("path",s0({},ae(n,!0),{className:_,d:ny(u,l,p,c,m)}))};function vf(){return vf=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function oee(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var iee=function(t,n,r,a,o,i){return"M".concat(t,",").concat(o,"v").concat(a,"M").concat(i,",").concat(n,"h").concat(r)},see=function(t){var n=t.x,r=n===void 0?0:n,a=t.y,o=a===void 0?0:a,i=t.top,s=i===void 0?0:i,u=t.left,l=u===void 0?0:u,p=t.width,c=p===void 0?0:p,m=t.height,d=m===void 0?0:m,g=t.className,f=aee(t,JJ),y=eee({x:r,y:o,top:s,left:l,width:c,height:d},f);return!V(r)||!V(o)||!V(c)||!V(d)||!V(s)||!V(l)?null:E.createElement("path",hf({},ae(y,!0),{className:le("recharts-cross",g),d:iee(r,o,c,d,s,l)}))},uee=fw,lee=uee(Object.getPrototypeOf,Object),cee=lee,pee=zr,mee=cee,dee=Ur,fee="[object Object]",vee=Function.prototype,hee=Object.prototype,Jb=vee.toString,yee=hee.hasOwnProperty,gee=Jb.call(Object);function _ee(e){if(!dee(e)||pee(e)!=fee)return!1;var t=mee(e);if(t===null)return!0;var n=yee.call(t,"constructor")&&t.constructor;return typeof n=="function"&&n instanceof n&&Jb.call(n)==gee}var xee=_ee;const wee=Ae(xee);var bee=zr,See=Ur,Pee="[object Boolean]";function Oee(e){return e===!0||e===!1||See(e)&&bee(e)==Pee}var kee=Oee;const Cee=Ae(kee);function ml(e){"@babel/helpers - typeof";return ml=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ml(e)}function u0(){return u0=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n0,from:{upperWidth:0,lowerWidth:0,height:m,x:u,y:l},to:{upperWidth:p,lowerWidth:c,height:m,x:u,y:l},duration:f,animationEasing:g,isActive:v},function(_){var w=_.upperWidth,x=_.lowerWidth,S=_.height,O=_.x,k=_.y;return E.createElement(Vn,{canBegin:i>0,from:"0px ".concat(i===-1?1:i,"px"),to:"".concat(i,"px 0px"),attributeName:"strokeDasharray",begin:y,duration:f,easing:g},E.createElement("path",u0({},ae(n,!0),{className:h,d:sy(O,k,w,x,S),ref:r})))}):E.createElement("g",null,E.createElement("path",u0({},ae(n,!0),{className:h,d:sy(u,l,p,c,m)})))},Dee=["option","shapeType","propTransformer","activeClassName","isActive"];function dl(e){"@babel/helpers - typeof";return dl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},dl(e)}function Lee(e,t){if(e==null)return{};var n=Hee(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Hee(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function uy(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function l0(e){for(var t=1;t0&&r.handleDrag(a.changedTouches[0])}),Xt(r,"handleDragEnd",function(){r.setState({isTravellerMoving:!1,isSlideMoving:!1},function(){var a=r.props,o=a.endIndex,i=a.onDragEnd,s=a.startIndex;i==null||i({endIndex:o,startIndex:s})}),r.detachDragEndListener()}),Xt(r,"handleLeaveWrapper",function(){(r.state.isTravellerMoving||r.state.isSlideMoving)&&(r.leaveTimer=window.setTimeout(r.handleDragEnd,r.props.leaveTimeOut))}),Xt(r,"handleEnterSlideOrTraveller",function(){r.setState({isTextActive:!0})}),Xt(r,"handleLeaveSlideOrTraveller",function(){r.setState({isTextActive:!1})}),Xt(r,"handleSlideDragStart",function(a){var o=vy(a)?a.changedTouches[0]:a;r.setState({isTravellerMoving:!1,isSlideMoving:!0,slideMoveStartX:o.pageX}),r.attachDragEndListener()}),r.travellerDragStartHandlers={startX:r.handleTravellerDragStart.bind(r,"startX"),endX:r.handleTravellerDragStart.bind(r,"endX")},r.state={},r}return Ste(t,e),_te(t,[{key:"componentWillUnmount",value:function(){this.leaveTimer&&(clearTimeout(this.leaveTimer),this.leaveTimer=null),this.detachDragEndListener()}},{key:"getIndex",value:function(r){var a=r.startX,o=r.endX,i=this.state.scaleValues,s=this.props,u=s.gap,l=s.data,p=l.length-1,c=Math.min(a,o),m=Math.max(a,o),d=t.getIndexInRange(i,c),g=t.getIndexInRange(i,m);return{startIndex:d-d%u,endIndex:g===p?p:g-g%u}}},{key:"getTextOfTick",value:function(r){var a=this.props,o=a.data,i=a.tickFormatter,s=a.dataKey,u=st(o[r],s,r);return oe(i)?i(u,r):u}},{key:"attachDragEndListener",value:function(){window.addEventListener("mouseup",this.handleDragEnd,!0),window.addEventListener("touchend",this.handleDragEnd,!0),window.addEventListener("mousemove",this.handleDrag,!0)}},{key:"detachDragEndListener",value:function(){window.removeEventListener("mouseup",this.handleDragEnd,!0),window.removeEventListener("touchend",this.handleDragEnd,!0),window.removeEventListener("mousemove",this.handleDrag,!0)}},{key:"handleSlideDrag",value:function(r){var a=this.state,o=a.slideMoveStartX,i=a.startX,s=a.endX,u=this.props,l=u.x,p=u.width,c=u.travellerWidth,m=u.startIndex,d=u.endIndex,g=u.onChange,f=r.pageX-o;f>0?f=Math.min(f,l+p-c-s,l+p-c-i):f<0&&(f=Math.max(f,l-i,l-s));var y=this.getIndex({startX:i+f,endX:s+f});(y.startIndex!==m||y.endIndex!==d)&&g&&g(y),this.setState({startX:i+f,endX:s+f,slideMoveStartX:r.pageX})}},{key:"handleTravellerDragStart",value:function(r,a){var o=vy(a)?a.changedTouches[0]:a;this.setState({isSlideMoving:!1,isTravellerMoving:!0,movingTravellerId:r,brushMoveStartX:o.pageX}),this.attachDragEndListener()}},{key:"handleTravellerMove",value:function(r){var a=this.state,o=a.brushMoveStartX,i=a.movingTravellerId,s=a.endX,u=a.startX,l=this.state[i],p=this.props,c=p.x,m=p.width,d=p.travellerWidth,g=p.onChange,f=p.gap,y=p.data,v={startX:this.state.startX,endX:this.state.endX},h=r.pageX-o;h>0?h=Math.min(h,c+m-d-l):h<0&&(h=Math.max(h,c-l)),v[i]=l+h;var _=this.getIndex(v),w=_.startIndex,x=_.endIndex,S=function(){var k=y.length-1;return i==="startX"&&(s>u?w%f===0:x%f===0)||su?x%f===0:w%f===0)||s>u&&x===k};this.setState(Xt(Xt({},i,l+h),"brushMoveStartX",r.pageX),function(){g&&S()&&g(_)})}},{key:"handleTravellerMoveKeyboard",value:function(r,a){var o=this,i=this.state,s=i.scaleValues,u=i.startX,l=i.endX,p=this.state[a],c=s.indexOf(p);if(c!==-1){var m=c+r;if(!(m===-1||m>=s.length)){var d=s[m];a==="startX"&&d>=l||a==="endX"&&d<=u||this.setState(Xt({},a,d),function(){o.props.onChange(o.getIndex({startX:o.state.startX,endX:o.state.endX}))})}}}},{key:"renderBackground",value:function(){var r=this.props,a=r.x,o=r.y,i=r.width,s=r.height,u=r.fill,l=r.stroke;return E.createElement("rect",{stroke:l,fill:u,x:a,y:o,width:i,height:s})}},{key:"renderPanorama",value:function(){var r=this.props,a=r.x,o=r.y,i=r.width,s=r.height,u=r.data,l=r.children,p=r.padding,c=P.Children.only(l);return c?E.cloneElement(c,{x:a,y:o,width:i,height:s,margin:p,compact:!0,data:u}):null}},{key:"renderTravellerLayer",value:function(r,a){var o,i,s=this,u=this.props,l=u.y,p=u.travellerWidth,c=u.height,m=u.traveller,d=u.ariaLabel,g=u.data,f=u.startIndex,y=u.endIndex,v=Math.max(r,this.props.x),h=ad(ad({},ae(this.props,!1)),{},{x:v,y:l,width:p,height:c}),_=d||"Min value: ".concat((o=g[f])===null||o===void 0?void 0:o.name,", Max value: ").concat((i=g[y])===null||i===void 0?void 0:i.name);return E.createElement(ye,{tabIndex:0,role:"slider","aria-label":_,"aria-valuenow":r,className:"recharts-brush-traveller",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.travellerDragStartHandlers[a],onTouchStart:this.travellerDragStartHandlers[a],onKeyDown:function(x){["ArrowLeft","ArrowRight"].includes(x.key)&&(x.preventDefault(),x.stopPropagation(),s.handleTravellerMoveKeyboard(x.key==="ArrowRight"?1:-1,a))},onFocus:function(){s.setState({isTravellerFocused:!0})},onBlur:function(){s.setState({isTravellerFocused:!1})},style:{cursor:"col-resize"}},t.renderTraveller(m,h))}},{key:"renderSlide",value:function(r,a){var o=this.props,i=o.y,s=o.height,u=o.stroke,l=o.travellerWidth,p=Math.min(r,a)+l,c=Math.max(Math.abs(a-r)-l,0);return E.createElement("rect",{className:"recharts-brush-slide",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.handleSlideDragStart,onTouchStart:this.handleSlideDragStart,style:{cursor:"move"},stroke:"none",fill:u,fillOpacity:.2,x:p,y:i,width:c,height:s})}},{key:"renderText",value:function(){var r=this.props,a=r.startIndex,o=r.endIndex,i=r.y,s=r.height,u=r.travellerWidth,l=r.stroke,p=this.state,c=p.startX,m=p.endX,d=5,g={pointerEvents:"none",fill:l};return E.createElement(ye,{className:"recharts-brush-texts"},E.createElement(Lp,p0({textAnchor:"end",verticalAnchor:"middle",x:Math.min(c,m)-d,y:i+s/2},g),this.getTextOfTick(a)),E.createElement(Lp,p0({textAnchor:"start",verticalAnchor:"middle",x:Math.max(c,m)+u+d,y:i+s/2},g),this.getTextOfTick(o)))}},{key:"render",value:function(){var r=this.props,a=r.data,o=r.className,i=r.children,s=r.x,u=r.y,l=r.width,p=r.height,c=r.alwaysShowText,m=this.state,d=m.startX,g=m.endX,f=m.isTextActive,y=m.isSlideMoving,v=m.isTravellerMoving,h=m.isTravellerFocused;if(!a||!a.length||!V(s)||!V(u)||!V(l)||!V(p)||l<=0||p<=0)return null;var _=le("recharts-brush",o),w=E.Children.count(i)===1,x=yte("userSelect","none");return E.createElement(ye,{className:_,onMouseLeave:this.handleLeaveWrapper,onTouchMove:this.handleTouchMove,style:x},this.renderBackground(),w&&this.renderPanorama(),this.renderSlide(d,g),this.renderTravellerLayer(d,"startX"),this.renderTravellerLayer(g,"endX"),(f||y||v||h||c)&&this.renderText())}}],[{key:"renderDefaultTraveller",value:function(r){var a=r.x,o=r.y,i=r.width,s=r.height,u=r.stroke,l=Math.floor(o+s/2)-1;return E.createElement(E.Fragment,null,E.createElement("rect",{x:a,y:o,width:i,height:s,fill:u,stroke:"none"}),E.createElement("line",{x1:a+1,y1:l,x2:a+i-1,y2:l,fill:"none",stroke:"#fff"}),E.createElement("line",{x1:a+1,y1:l+2,x2:a+i-1,y2:l+2,fill:"none",stroke:"#fff"}))}},{key:"renderTraveller",value:function(r,a){var o;return E.isValidElement(r)?o=E.cloneElement(r,a):oe(r)?o=r(a):o=t.renderDefaultTraveller(a),o}},{key:"getDerivedStateFromProps",value:function(r,a){var o=r.data,i=r.width,s=r.x,u=r.travellerWidth,l=r.updateId,p=r.startIndex,c=r.endIndex;if(o!==a.prevData||l!==a.prevUpdateId)return ad({prevData:o,prevTravellerWidth:u,prevUpdateId:l,prevX:s,prevWidth:i},o&&o.length?Ote({data:o,width:i,x:s,travellerWidth:u,startIndex:p,endIndex:c}):{scale:null,scaleValues:null});if(a.scale&&(i!==a.prevWidth||s!==a.prevX||u!==a.prevTravellerWidth)){a.scale.range([s,s+i-u]);var m=a.scale.domain().map(function(d){return a.scale(d)});return{prevData:o,prevTravellerWidth:u,prevUpdateId:l,prevX:s,prevWidth:i,startX:a.scale(r.startIndex),endX:a.scale(r.endIndex),scaleValues:m}}return null}},{key:"getIndexInRange",value:function(r,a){for(var o=r.length,i=0,s=o-1;s-i>1;){var u=Math.floor((i+s)/2);r[u]>a?s=u:i=u}return a>=r[s]?s:i}}])}(P.PureComponent);Xt(Xi,"displayName","Brush");Xt(Xi,"defaultProps",{height:40,travellerWidth:5,gap:1,fill:"#fff",stroke:"#666",padding:{top:1,right:1,bottom:1,left:1},leaveTimeOut:1e3,alwaysShowText:!1});var kte=P9;function Cte(e,t){var n;return kte(e,function(r,a,o){return n=t(r,a,o),!n}),!!n}var Ate=Cte,Ete=iw,Nte=Ia,Tte=Ate,jte=Vt,Rte=b1;function $te(e,t,n){var r=jte(e)?Ete:Tte;return n&&Rte(e,t,n)&&(t=void 0),r(e,Nte(t))}var Mte=$te;const qte=Ae(Mte);var fr=function(t,n){var r=t.alwaysShow,a=t.ifOverflow;return r&&(a="extendDomain"),a===n},hy=Aw;function Ite(e,t,n){t=="__proto__"&&hy?hy(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}var Dte=Ite,Lte=Dte,Hte=kw,Gte=Ia;function Bte(e,t){var n={};return t=Gte(t),Hte(e,function(r,a,o){Lte(n,a,t(r,a,o))}),n}var Fte=Bte;const zte=Ae(Fte);function Ute(e,t){for(var n=-1,r=e==null?0:e.length;++n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function une(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function lne(e,t){var n=e.x,r=e.y,a=sne(e,rne),o="".concat(n),i=parseInt(o,10),s="".concat(r),u=parseInt(s,10),l="".concat(t.height||a.height),p=parseInt(l,10),c="".concat(t.width||a.width),m=parseInt(c,10);return Zs(Zs(Zs(Zs(Zs({},t),a),i?{x:i}:{}),u?{y:u}:{}),{},{height:p,width:m,name:t.name,radius:t.radius})}function gy(e){return E.createElement(yf,_f({shapeType:"rectangle",propTransformer:lne,activeClassName:"recharts-active-bar"},e))}var cne=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return function(r,a){if(typeof t=="number")return t;var o=V(r)||SM(r);return o?t(r,a):(o||Eo(),n)}},pne=["value","background"],oS;function Yi(e){"@babel/helpers - typeof";return Yi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Yi(e)}function mne(e,t){if(e==null)return{};var n=dne(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dne(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function d0(){return d0=Object.assign?Object.assign.bind():function(e){for(var t=1;t0&&Math.abs(q)0&&Math.abs(R)0&&($=Math.min((ie||0)-(R[he-1]||0),$))}),Number.isFinite($)){var q=$/A,M=f.layout==="vertical"?r.height:r.width;if(f.padding==="gap"&&(O=q*M/2),f.padding==="no-gap"){var D=ko(t.barCategoryGap,q*M),j=q*M/2;O=j-D-(j-D)/M*D}}}a==="xAxis"?k=[r.left+(_.left||0)+(O||0),r.left+r.width-(_.right||0)-(O||0)]:a==="yAxis"?k=u==="horizontal"?[r.top+r.height-(_.bottom||0),r.top+(_.top||0)]:[r.top+(_.top||0)+(O||0),r.top+r.height-(_.bottom||0)-(O||0)]:k=f.range,x&&(k=[k[1],k[0]]);var I=UY(f,o,m),B=I.scale,U=I.realScaleType;B.domain(v).range(k),WY(B);var F=eQ(B,Rn(Rn({},f),{},{realScaleType:U}));a==="xAxis"?(T=y==="top"&&!w||y==="bottom"&&w,C=r.left,N=c[S]-T*f.height):a==="yAxis"&&(T=y==="left"&&!w||y==="right"&&w,C=c[S]-T*f.width,N=r.top);var Z=Rn(Rn(Rn({},f),F),{},{realScaleType:U,x:C,y:N,scale:B,width:a==="xAxis"?r.width:f.width,height:a==="yAxis"?r.height:f.height});return Z.bandSize=e0(Z,F),!f.hide&&a==="xAxis"?c[S]+=(T?-1:1)*Z.height:f.hide||(c[S]+=(T?-1:1)*Z.width),Rn(Rn({},d),{},M1({},g,Z))},{})},lS=function(t,n){var r=t.x,a=t.y,o=n.x,i=n.y;return{x:Math.min(r,o),y:Math.min(a,i),width:Math.abs(o-r),height:Math.abs(i-a)}},Pne=function(t){var n=t.x1,r=t.y1,a=t.x2,o=t.y2;return lS({x:n,y:r},{x:a,y:o})},cS=function(){function e(t){wne(this,e),this.scale=t}return bne(e,[{key:"domain",get:function(){return this.scale.domain}},{key:"range",get:function(){return this.scale.range}},{key:"rangeMin",get:function(){return this.range()[0]}},{key:"rangeMax",get:function(){return this.range()[1]}},{key:"bandwidth",get:function(){return this.scale.bandwidth}},{key:"apply",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},a=r.bandAware,o=r.position;if(n!==void 0){if(o)switch(o){case"start":return this.scale(n);case"middle":{var i=this.bandwidth?this.bandwidth()/2:0;return this.scale(n)+i}case"end":{var s=this.bandwidth?this.bandwidth():0;return this.scale(n)+s}default:return this.scale(n)}if(a){var u=this.bandwidth?this.bandwidth()/2:0;return this.scale(n)+u}return this.scale(n)}}},{key:"isInRange",value:function(n){var r=this.range(),a=r[0],o=r[r.length-1];return a<=o?n>=a&&n<=o:n>=o&&n<=a}}],[{key:"create",value:function(n){return new e(n)}}])}();M1(cS,"EPS",1e-4);var e5=function(t){var n=Object.keys(t).reduce(function(r,a){return Rn(Rn({},r),{},M1({},a,cS.create(t[a])))},{});return Rn(Rn({},n),{},{apply:function(a){var o=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=o.bandAware,s=o.position;return zte(a,function(u,l){return n[l].apply(u,{bandAware:i,position:s})})},isInRange:function(a){return aS(a,function(o,i){return n[i].isInRange(o)})}})};function One(e){return(e%180+180)%180}var kne=function(t){var n=t.width,r=t.height,a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,o=One(a),i=o*Math.PI/180,s=Math.atan(r/n),u=i>s&&i-1?a[o?t[i]:i]:void 0}}var Tne=Nne,jne=eS;function Rne(e){var t=jne(e),n=t%1;return t===t?n?t-n:t:0}var $ne=Rne,Mne=xw,qne=Ia,Ine=$ne,Dne=Math.max;function Lne(e,t,n){var r=e==null?0:e.length;if(!r)return-1;var a=n==null?0:Ine(n);return a<0&&(a=Dne(r+a,0)),Mne(e,qne(t),a)}var Hne=Lne,Gne=Tne,Bne=Hne,Fne=Gne(Bne),zne=Fne;const Une=Ae(zne);var Wne=E$(function(e){return{x:e.left,y:e.top,width:e.width,height:e.height}},function(e){return["l",e.left,"t",e.top,"w",e.width,"h",e.height].join("")}),t5=P.createContext(void 0),n5=P.createContext(void 0),pS=P.createContext(void 0),mS=P.createContext({}),dS=P.createContext(void 0),fS=P.createContext(0),vS=P.createContext(0),Sy=function(t){var n=t.state,r=n.xAxisMap,a=n.yAxisMap,o=n.offset,i=t.clipPathId,s=t.children,u=t.width,l=t.height,p=Wne(o);return E.createElement(t5.Provider,{value:r},E.createElement(n5.Provider,{value:a},E.createElement(mS.Provider,{value:o},E.createElement(pS.Provider,{value:p},E.createElement(dS.Provider,{value:i},E.createElement(fS.Provider,{value:l},E.createElement(vS.Provider,{value:u},s)))))))},Vne=function(){return P.useContext(dS)},hS=function(t){var n=P.useContext(t5);n==null&&Eo();var r=n[t];return r==null&&Eo(),r},Kne=function(){var t=P.useContext(t5);return oa(t)},Xne=function(){var t=P.useContext(n5),n=Une(t,function(r){return aS(r.domain,Number.isFinite)});return n||oa(t)},yS=function(t){var n=P.useContext(n5);n==null&&Eo();var r=n[t];return r==null&&Eo(),r},Yne=function(){var t=P.useContext(pS);return t},Qne=function(){return P.useContext(mS)},r5=function(){return P.useContext(vS)},a5=function(){return P.useContext(fS)};function Qi(e){"@babel/helpers - typeof";return Qi=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Qi(e)}function Zne(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Jne(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne*a)return!1;var o=n();return e*(t-e*o/2-r)>=0&&e*(t+e*o/2-a)<=0}function $re(e,t){return PS(e,t+1)}function Mre(e,t,n,r,a){for(var o=(r||[]).slice(),i=t.start,s=t.end,u=0,l=1,p=i,c=function(){var g=r==null?void 0:r[u];if(g===void 0)return{v:PS(r,l)};var f=u,y,v=function(){return y===void 0&&(y=n(g,f)),y},h=g.coordinate,_=u===0||g0(e,h,v,p,s);_||(u=0,p=i,l+=1),_&&(p=h+e*(v()/2+a),u+=l)},m;l<=o.length;)if(m=c(),m)return m.v;return[]}function gl(e){"@babel/helpers - typeof";return gl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},gl(e)}function Ty(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function kt(e){for(var t=1;t0?d.coordinate-y*e:d.coordinate})}else o[m]=d=kt(kt({},d),{},{tickCoord:d.coordinate});var v=g0(e,d.tickCoord,f,s,u);v&&(u=d.tickCoord-e*(f()/2+a),o[m]=kt(kt({},d),{},{isShow:!0}))},p=i-1;p>=0;p--)l(p);return o}function Hre(e,t,n,r,a,o){var i=(r||[]).slice(),s=i.length,u=t.start,l=t.end;if(o){var p=r[s-1],c=n(p,s-1),m=e*(p.coordinate+e*c/2-l);i[s-1]=p=kt(kt({},p),{},{tickCoord:m>0?p.coordinate-m*e:p.coordinate});var d=g0(e,p.tickCoord,function(){return c},u,l);d&&(l=p.tickCoord-e*(c/2+a),i[s-1]=kt(kt({},p),{},{isShow:!0}))}for(var g=o?s-1:s,f=function(h){var _=i[h],w,x=function(){return w===void 0&&(w=n(_,h)),w};if(h===0){var S=e*(_.coordinate-e*x()/2-u);i[h]=_=kt(kt({},_),{},{tickCoord:S<0?_.coordinate-S*e:_.coordinate})}else i[h]=_=kt(kt({},_),{},{tickCoord:_.coordinate});var O=g0(e,_.tickCoord,x,u,l);O&&(u=_.tickCoord+e*(x()/2+a),i[h]=kt(kt({},_),{},{isShow:!0}))},y=0;y=2?In(a[1].coordinate-a[0].coordinate):1,v=Rre(o,y,d);return u==="equidistantPreserveStart"?Mre(y,v,f,a,i):(u==="preserveStart"||u==="preserveStartEnd"?m=Hre(y,v,f,a,i,u==="preserveStartEnd"):m=Lre(y,v,f,a,i),m.filter(function(h){return h.isShow}))}var Gre=["viewBox"],Bre=["viewBox"],Fre=["ticks"];function es(e){"@babel/helpers - typeof";return es=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},es(e)}function oi(){return oi=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function zre(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function Ure(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Ry(e,t){for(var n=0;n0?u(this.props):u(d)),i<=0||s<=0||!g||!g.length?null:E.createElement(ye,{className:le("recharts-cartesian-axis",l),ref:function(y){r.layerReference=y}},o&&this.renderAxisLine(),this.renderTicks(g,this.state.fontSize,this.state.letterSpacing),At.renderCallByParent(this.props))}}],[{key:"renderTickItem",value:function(r,a,o){var i,s=le(a.className,"recharts-cartesian-axis-tick-value");return E.isValidElement(r)?i=E.cloneElement(r,nt(nt({},a),{},{className:s})):oe(r)?i=r(nt(nt({},a),{},{className:s})):i=E.createElement(Lp,oi({},a,{className:"recharts-cartesian-axis-tick-value"}),o),i}}])}(P.Component);u5(js,"displayName","CartesianAxis");u5(js,"defaultProps",{x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd"});var Zre=["x1","y1","x2","y2","key"],Jre=["offset"];function No(e){"@babel/helpers - typeof";return No=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},No(e)}function $y(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function Et(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function rae(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var aae=function(t){var n=t.fill;if(!n||n==="none")return null;var r=t.fillOpacity,a=t.x,o=t.y,i=t.width,s=t.height,u=t.ry;return E.createElement("rect",{x:a,y:o,ry:u,width:i,height:s,stroke:"none",fill:n,fillOpacity:r,className:"recharts-cartesian-grid-bg"})};function CS(e,t){var n;if(E.isValidElement(e))n=E.cloneElement(e,t);else if(oe(e))n=e(t);else{var r=t.x1,a=t.y1,o=t.x2,i=t.y2,s=t.key,u=My(t,Zre),l=ae(u,!1);l.offset;var p=My(l,Jre);n=E.createElement("line",ro({},p,{x1:r,y1:a,x2:o,y2:i,fill:"none",key:s}))}return n}function oae(e){var t=e.x,n=e.width,r=e.horizontal,a=r===void 0?!0:r,o=e.horizontalPoints;if(!a||!o||!o.length)return null;var i=o.map(function(s,u){var l=Et(Et({},e),{},{x1:t,y1:s,x2:t+n,y2:s,key:"line-".concat(u),index:u});return CS(a,l)});return E.createElement("g",{className:"recharts-cartesian-grid-horizontal"},i)}function iae(e){var t=e.y,n=e.height,r=e.vertical,a=r===void 0?!0:r,o=e.verticalPoints;if(!a||!o||!o.length)return null;var i=o.map(function(s,u){var l=Et(Et({},e),{},{x1:s,y1:t,x2:s,y2:t+n,key:"line-".concat(u),index:u});return CS(a,l)});return E.createElement("g",{className:"recharts-cartesian-grid-vertical"},i)}function sae(e){var t=e.horizontalFill,n=e.fillOpacity,r=e.x,a=e.y,o=e.width,i=e.height,s=e.horizontalPoints,u=e.horizontal,l=u===void 0?!0:u;if(!l||!t||!t.length)return null;var p=s.map(function(m){return Math.round(m+a-a)}).sort(function(m,d){return m-d});a!==p[0]&&p.unshift(0);var c=p.map(function(m,d){var g=!p[d+1],f=g?a+i-m:p[d+1]-m;if(f<=0)return null;var y=d%t.length;return E.createElement("rect",{key:"react-".concat(d),y:m,x:r,height:f,width:o,stroke:"none",fill:t[y],fillOpacity:n,className:"recharts-cartesian-grid-bg"})});return E.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},c)}function uae(e){var t=e.vertical,n=t===void 0?!0:t,r=e.verticalFill,a=e.fillOpacity,o=e.x,i=e.y,s=e.width,u=e.height,l=e.verticalPoints;if(!n||!r||!r.length)return null;var p=l.map(function(m){return Math.round(m+o-o)}).sort(function(m,d){return m-d});o!==p[0]&&p.unshift(0);var c=p.map(function(m,d){var g=!p[d+1],f=g?o+s-m:p[d+1]-m;if(f<=0)return null;var y=d%r.length;return E.createElement("rect",{key:"react-".concat(d),x:m,y:i,width:f,height:u,stroke:"none",fill:r[y],fillOpacity:a,className:"recharts-cartesian-grid-bg"})});return E.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},c)}var lae=function(t,n){var r=t.xAxis,a=t.width,o=t.height,i=t.offset;return Ib(s5(Et(Et(Et({},js.defaultProps),r),{},{ticks:Ar(r,!0),viewBox:{x:0,y:0,width:a,height:o}})),i.left,i.left+i.width,n)},cae=function(t,n){var r=t.yAxis,a=t.width,o=t.height,i=t.offset;return Ib(s5(Et(Et(Et({},js.defaultProps),r),{},{ticks:Ar(r,!0),viewBox:{x:0,y:0,width:a,height:o}})),i.top,i.top+i.height,n)},zo={horizontal:!0,vertical:!0,stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[]};function Dn(e){var t,n,r,a,o,i,s=r5(),u=a5(),l=Qne(),p=Et(Et({},e),{},{stroke:(t=e.stroke)!==null&&t!==void 0?t:zo.stroke,fill:(n=e.fill)!==null&&n!==void 0?n:zo.fill,horizontal:(r=e.horizontal)!==null&&r!==void 0?r:zo.horizontal,horizontalFill:(a=e.horizontalFill)!==null&&a!==void 0?a:zo.horizontalFill,vertical:(o=e.vertical)!==null&&o!==void 0?o:zo.vertical,verticalFill:(i=e.verticalFill)!==null&&i!==void 0?i:zo.verticalFill,x:V(e.x)?e.x:l.left,y:V(e.y)?e.y:l.top,width:V(e.width)?e.width:l.width,height:V(e.height)?e.height:l.height}),c=p.x,m=p.y,d=p.width,g=p.height,f=p.syncWithTicks,y=p.horizontalValues,v=p.verticalValues,h=Kne(),_=Xne();if(!V(d)||d<=0||!V(g)||g<=0||!V(c)||c!==+c||!V(m)||m!==+m)return null;var w=p.verticalCoordinatesGenerator||lae,x=p.horizontalCoordinatesGenerator||cae,S=p.horizontalPoints,O=p.verticalPoints;if((!S||!S.length)&&oe(x)){var k=y&&y.length,C=x({yAxis:_?Et(Et({},_),{},{ticks:k?y:_.ticks}):void 0,width:s,height:u,offset:l},k?!0:f);Tr(Array.isArray(C),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(No(C),"]")),Array.isArray(C)&&(S=C)}if((!O||!O.length)&&oe(w)){var N=v&&v.length,T=w({xAxis:h?Et(Et({},h),{},{ticks:N?v:h.ticks}):void 0,width:s,height:u,offset:l},N?!0:f);Tr(Array.isArray(T),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(No(T),"]")),Array.isArray(T)&&(O=T)}return E.createElement("g",{className:"recharts-cartesian-grid"},E.createElement(aae,{fill:p.fill,fillOpacity:p.fillOpacity,x:p.x,y:p.y,width:p.width,height:p.height,ry:p.ry}),E.createElement(oae,ro({},p,{offset:l,horizontalPoints:S,xAxis:h,yAxis:_})),E.createElement(iae,ro({},p,{offset:l,verticalPoints:O,xAxis:h,yAxis:_})),E.createElement(sae,ro({},p,{horizontalPoints:S})),E.createElement(uae,ro({},p,{verticalPoints:O})))}Dn.displayName="CartesianGrid";var pae=["type","layout","connectNulls","ref"],mae=["key"];function ts(e){"@babel/helpers - typeof";return ts=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ts(e)}function qy(e,t){if(e==null)return{};var n=dae(e,t),r,a;if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(a=0;a=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function dae(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function gu(){return gu=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);nc){d=[].concat(Uo(u.slice(0,g)),[c-f]);break}var y=d.length%2===0?[0,m]:[m];return[].concat(Uo(t.repeat(u,p)),Uo(d),y).map(function(v){return"".concat(v,"px")}).join(", ")}),$n(n,"id",$o("recharts-line-")),$n(n,"pathRef",function(i){n.mainCurve=i}),$n(n,"handleAnimationEnd",function(){n.setState({isAnimationFinished:!0}),n.props.onAnimationEnd&&n.props.onAnimationEnd()}),$n(n,"handleAnimationStart",function(){n.setState({isAnimationFinished:!1}),n.props.onAnimationStart&&n.props.onAnimationStart()}),n}return Sae(t,e),_ae(t,[{key:"componentDidMount",value:function(){if(this.props.isAnimationActive){var r=this.getTotalLength();this.setState({totalLength:r})}}},{key:"componentDidUpdate",value:function(){if(this.props.isAnimationActive){var r=this.getTotalLength();r!==this.state.totalLength&&this.setState({totalLength:r})}}},{key:"getTotalLength",value:function(){var r=this.mainCurve;try{return r&&r.getTotalLength&&r.getTotalLength()||0}catch{return 0}}},{key:"renderErrorBar",value:function(r,a){if(this.props.isAnimationActive&&!this.state.isAnimationFinished)return null;var o=this.props,i=o.points,s=o.xAxis,u=o.yAxis,l=o.layout,p=o.children,c=Wt(p,Ts);if(!c)return null;var m=function(f,y){return{x:f.x,y:f.y,value:f.value,errorVal:st(f.payload,y)}},d={clipPath:r?"url(#clipPath-".concat(a,")"):null};return E.createElement(ye,d,c.map(function(g){return E.cloneElement(g,{key:"bar-".concat(g.props.dataKey),data:i,xAxis:s,yAxis:u,layout:l,dataPointFormatter:m})}))}},{key:"renderDots",value:function(r,a,o){var i=this.props.isAnimationActive;if(i&&!this.state.isAnimationFinished)return null;var s=this.props,u=s.dot,l=s.points,p=s.dataKey,c=ae(this.props,!1),m=ae(u,!0),d=l.map(function(f,y){var v=Kt(Kt(Kt({key:"dot-".concat(y),r:3},c),m),{},{index:y,cx:f.x,cy:f.y,value:f.value,dataKey:p,payload:f.payload,points:l});return t.renderDotItem(u,v)}),g={clipPath:r?"url(#clipPath-".concat(a?"":"dots-").concat(o,")"):null};return E.createElement(ye,gu({className:"recharts-line-dots",key:"dots"},g),d)}},{key:"renderCurveStatically",value:function(r,a,o,i){var s=this.props,u=s.type,l=s.layout,p=s.connectNulls;s.ref;var c=qy(s,pae),m=Kt(Kt(Kt({},ae(c,!0)),{},{fill:"none",className:"recharts-line-curve",clipPath:a?"url(#clipPath-".concat(o,")"):null,points:r},i),{},{type:u,layout:l,connectNulls:p});return E.createElement(ho,gu({},m,{pathRef:this.pathRef}))}},{key:"renderCurveWithAnimation",value:function(r,a){var o=this,i=this.props,s=i.points,u=i.strokeDasharray,l=i.isAnimationActive,p=i.animationBegin,c=i.animationDuration,m=i.animationEasing,d=i.animationId,g=i.animateNewValues,f=i.width,y=i.height,v=this.state,h=v.prevPoints,_=v.totalLength;return E.createElement(Vn,{begin:p,duration:c,isActive:l,easing:m,from:{t:0},to:{t:1},key:"line-".concat(d),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(w){var x=w.t;if(h){var S=h.length/s.length,O=s.map(function(A,$){var R=Math.floor($*S);if(h[R]){var q=h[R],M=Ye(q.x,A.x),D=Ye(q.y,A.y);return Kt(Kt({},A),{},{x:M(x),y:D(x)})}if(g){var j=Ye(f*2,A.x),I=Ye(y/2,A.y);return Kt(Kt({},A),{},{x:j(x),y:I(x)})}return Kt(Kt({},A),{},{x:A.x,y:A.y})});return o.renderCurveStatically(O,r,a)}var k=Ye(0,_),C=k(x),N;if(u){var T="".concat(u).split(/[,\s]+/gim).map(function(A){return parseFloat(A)});N=o.getStrokeDasharray(C,_,T)}else N=o.generateSimpleStrokeDasharray(_,C);return o.renderCurveStatically(s,r,a,{strokeDasharray:N})})}},{key:"renderCurve",value:function(r,a){var o=this.props,i=o.points,s=o.isAnimationActive,u=this.state,l=u.prevPoints,p=u.totalLength;return s&&i&&i.length&&(!l&&p>0||!Co(l,i))?this.renderCurveWithAnimation(r,a):this.renderCurveStatically(i,r,a)}},{key:"render",value:function(){var r,a=this.props,o=a.hide,i=a.dot,s=a.points,u=a.className,l=a.xAxis,p=a.yAxis,c=a.top,m=a.left,d=a.width,g=a.height,f=a.isAnimationActive,y=a.id;if(o||!s||!s.length)return null;var v=this.state.isAnimationFinished,h=s.length===1,_=le("recharts-line",u),w=l&&l.allowDataOverflow,x=p&&p.allowDataOverflow,S=w||x,O=ne(y)?this.id:y,k=(r=ae(i,!1))!==null&&r!==void 0?r:{r:3,strokeWidth:2},C=k.r,N=C===void 0?3:C,T=k.strokeWidth,A=T===void 0?2:T,$=Tx(i)?i:{},R=$.clipDot,q=R===void 0?!0:R,M=N*2+A;return E.createElement(ye,{className:_},w||x?E.createElement("defs",null,E.createElement("clipPath",{id:"clipPath-".concat(O)},E.createElement("rect",{x:w?m:m-d/2,y:x?c:c-g/2,width:w?d:d*2,height:x?g:g*2})),!q&&E.createElement("clipPath",{id:"clipPath-dots-".concat(O)},E.createElement("rect",{x:m-M/2,y:c-M/2,width:d+M,height:g+M}))):null,!h&&this.renderCurve(S,O),this.renderErrorBar(S,O),(h||i)&&this.renderDots(S,q,O),(!f||v)&&dr.renderCallByParent(this.props,s))}}],[{key:"getDerivedStateFromProps",value:function(r,a){return r.animationId!==a.prevAnimationId?{prevAnimationId:r.animationId,curPoints:r.points,prevPoints:a.curPoints}:r.points!==a.curPoints?{curPoints:r.points}:null}},{key:"repeat",value:function(r,a){for(var o=r.length%2!==0?[].concat(Uo(r),[0]):r,i=[],s=0;s=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Cae(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function ao(){return ao=Object.assign?Object.assign.bind():function(e){for(var t=1;t0||!Co(p,i)||!Co(c,s))?this.renderAreaWithAnimation(r,a):this.renderAreaStatically(i,s,r,a)}},{key:"render",value:function(){var r,a=this.props,o=a.hide,i=a.dot,s=a.points,u=a.className,l=a.top,p=a.left,c=a.xAxis,m=a.yAxis,d=a.width,g=a.height,f=a.isAnimationActive,y=a.id;if(o||!s||!s.length)return null;var v=this.state.isAnimationFinished,h=s.length===1,_=le("recharts-area",u),w=c&&c.allowDataOverflow,x=m&&m.allowDataOverflow,S=w||x,O=ne(y)?this.id:y,k=(r=ae(i,!1))!==null&&r!==void 0?r:{r:3,strokeWidth:2},C=k.r,N=C===void 0?3:C,T=k.strokeWidth,A=T===void 0?2:T,$=Tx(i)?i:{},R=$.clipDot,q=R===void 0?!0:R,M=N*2+A;return E.createElement(ye,{className:_},w||x?E.createElement("defs",null,E.createElement("clipPath",{id:"clipPath-".concat(O)},E.createElement("rect",{x:w?p:p-d/2,y:x?l:l-g/2,width:w?d:d*2,height:x?g:g*2})),!q&&E.createElement("clipPath",{id:"clipPath-dots-".concat(O)},E.createElement("rect",{x:p-M/2,y:l-M/2,width:d+M,height:g+M}))):null,h?null:this.renderArea(S,O),(i||h)&&this.renderDots(S,q,O),(!f||v)&&dr.renderCallByParent(this.props,s))}}],[{key:"getDerivedStateFromProps",value:function(r,a){return r.animationId!==a.prevAnimationId?{prevAnimationId:r.animationId,curPoints:r.points,curBaseLine:r.baseLine,prevPoints:a.curPoints,prevBaseLine:a.curBaseLine}:r.points!==a.curPoints||r.baseLine!==a.curBaseLine?{curPoints:r.points,curBaseLine:r.baseLine}:null}}])}(P.PureComponent);NS=xt;ir(xt,"displayName","Area");ir(xt,"defaultProps",{stroke:"#3182bd",fill:"#3182bd",fillOpacity:.6,xAxisId:0,yAxisId:0,legendType:"line",connectNulls:!1,points:[],dot:!1,activeDot:!0,hide:!1,isAnimationActive:!Da.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"ease"});ir(xt,"getBaseValue",function(e,t,n,r){var a=e.layout,o=e.baseValue,i=t.props.baseValue,s=i??o;if(V(s)&&typeof s=="number")return s;var u=a==="horizontal"?r:n,l=u.scale.domain();if(u.type==="number"){var p=Math.max(l[0],l[1]),c=Math.min(l[0],l[1]);return s==="dataMin"?c:s==="dataMax"||p<0?p:Math.max(Math.min(l[0],l[1]),0)}return s==="dataMin"?l[0]:s==="dataMax"?l[1]:l[0]});ir(xt,"getComposedData",function(e){var t=e.props,n=e.item,r=e.xAxis,a=e.yAxis,o=e.xAxisTicks,i=e.yAxisTicks,s=e.bandSize,u=e.dataKey,l=e.stackedData,p=e.dataStartIndex,c=e.displayedData,m=e.offset,d=t.layout,g=l&&l.length,f=NS.getBaseValue(t,n,r,a),y=d==="horizontal",v=!1,h=c.map(function(w,x){var S;g?S=l[p+x]:(S=st(w,u),Array.isArray(S)?v=!0:S=[f,S]);var O=S[1]==null||g&&st(w,u)==null;return y?{x:Wi({axis:r,ticks:o,bandSize:s,entry:w,index:x}),y:O?null:a.scale(S[1]),value:S,payload:w}:{x:O?null:r.scale(S[1]),y:Wi({axis:a,ticks:i,bandSize:s,entry:w,index:x}),value:S,payload:w}}),_;return g||v?_=h.map(function(w){var x=Array.isArray(w.value)?w.value[0]:null;return y?{x:w.x,y:x!=null&&w.y!=null?a.scale(x):null}:{x:x!=null?r.scale(x):null,y:w.y}}):_=y?a.scale(f):r.scale(f),Zr({points:h,baseLine:_,layout:d,isRange:v},m)});ir(xt,"renderDotItem",function(e,t){var n;if(E.isValidElement(e))n=E.cloneElement(e,t);else if(oe(e))n=e(t);else{var r=le("recharts-area-dot",typeof e!="boolean"?e.className:""),a=t.key,o=TS(t,kae);n=E.createElement(j1,ao({},o,{key:a,className:r}))}return n});function rs(e){"@babel/helpers - typeof";return rs=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},rs(e)}function Mae(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function qae(e,t){for(var n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Uae(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function Wae(e){var t=e.option,n=e.isActive,r=zae(e,Fae);return typeof t=="string"?P.createElement(yf,_u({option:P.createElement(_1,_u({type:t},r)),isActive:n,shapeType:"symbols"},r)):P.createElement(yf,_u({option:t,isActive:n,shapeType:"symbols"},r))}function as(e){"@babel/helpers - typeof";return as=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},as(e)}function xu(){return xu=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function Goe(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function Boe(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function Foe(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n0?i:t&&t.length&&V(a)&&V(o)?t.slice(a,o+1):[]};function ZS(e){return e==="number"?[0,"auto"]:void 0}var Gf=function(t,n,r,a){var o=t.graphicalItems,i=t.tooltipAxis,s=F1(n,t);return r<0||!o||!o.length||r>=s.length?null:o.reduce(function(u,l){var p,c=(p=l.props.data)!==null&&p!==void 0?p:n;c&&t.dataStartIndex+t.dataEndIndex!==0&&t.dataEndIndex-t.dataStartIndex>=r&&(c=c.slice(t.dataStartIndex,t.dataEndIndex+1));var m;if(i.dataKey&&!i.allowDuplicatedCategory){var d=c===void 0?s:c;m=Pp(d,i.dataKey,a)}else m=c&&c[r]||s[r];return m?[].concat(us(u),[Lb(l,m)]):u},[])},Ky=function(t,n,r,a){var o=a||{x:t.chartX,y:t.chartY},i=tie(o,r),s=t.orderedTooltipTicks,u=t.tooltipAxis,l=t.tooltipTicks,p=LY(i,s,l,u);if(p>=0&&l){var c=l[p]&&l[p].value,m=Gf(t,n,p,c),d=nie(r,s,p,o);return{activeTooltipIndex:p,activeLabel:c,activePayload:m,activeCoordinate:d}}return null},rie=function(t,n){var r=n.axes,a=n.graphicalItems,o=n.axisType,i=n.axisIdKey,s=n.stackGroups,u=n.dataStartIndex,l=n.dataEndIndex,p=t.layout,c=t.children,m=t.stackOffset,d=qb(p,o);return r.reduce(function(g,f){var y,v=f.type.defaultProps!==void 0?H(H({},f.type.defaultProps),f.props):f.props,h=v.type,_=v.dataKey,w=v.allowDataOverflow,x=v.allowDuplicatedCategory,S=v.scale,O=v.ticks,k=v.includeHidden,C=v[i];if(g[C])return g;var N=F1(t.data,{graphicalItems:a.filter(function(F){var Z,ie=i in F.props?F.props[i]:(Z=F.type.defaultProps)===null||Z===void 0?void 0:Z[i];return ie===C}),dataStartIndex:u,dataEndIndex:l}),T=N.length,A,$,R;Eoe(v.domain,w,h)&&(A=ef(v.domain,null,w),d&&(h==="number"||S!=="auto")&&(R=hu(N,_,"category")));var q=ZS(h);if(!A||A.length===0){var M,D=(M=v.domain)!==null&&M!==void 0?M:q;if(_){if(A=hu(N,_,h),h==="category"&&d){var j=OM(A);x&&j?($=A,A=c0(0,T)):x||(A=O6(D,A,f).reduce(function(F,Z){return F.indexOf(Z)>=0?F:[].concat(us(F),[Z])},[]))}else if(h==="category")x?A=A.filter(function(F){return F!==""&&!ne(F)}):A=O6(D,A,f).reduce(function(F,Z){return F.indexOf(Z)>=0||Z===""||ne(Z)?F:[].concat(us(F),[Z])},[]);else if(h==="number"){var I=zY(N,a.filter(function(F){var Z,ie,he=i in F.props?F.props[i]:(Z=F.type.defaultProps)===null||Z===void 0?void 0:Z[i],be="hide"in F.props?F.props.hide:(ie=F.type.defaultProps)===null||ie===void 0?void 0:ie.hide;return he===C&&(k||!be)}),_,o,p);I&&(A=I)}d&&(h==="number"||S!=="auto")&&(R=hu(N,_,"category"))}else d?A=c0(0,T):s&&s[C]&&s[C].hasStack&&h==="number"?A=m==="expand"?[0,1]:Db(s[C].stackGroups,u,l):A=Mb(N,a.filter(function(F){var Z=i in F.props?F.props[i]:F.type.defaultProps[i],ie="hide"in F.props?F.props.hide:F.type.defaultProps.hide;return Z===C&&(k||!ie)}),h,p,!0);if(h==="number")A=Df(c,A,C,o,O),D&&(A=ef(D,A,w));else if(h==="category"&&D){var B=D,U=A.every(function(F){return B.indexOf(F)>=0});U&&(A=B)}}return H(H({},g),{},ee({},C,H(H({},v),{},{axisType:o,domain:A,categoricalDomain:R,duplicateDomain:$,originalDomain:(y=v.domain)!==null&&y!==void 0?y:q,isCategorical:d,layout:p})))},{})},aie=function(t,n){var r=n.graphicalItems,a=n.Axis,o=n.axisType,i=n.axisIdKey,s=n.stackGroups,u=n.dataStartIndex,l=n.dataEndIndex,p=t.layout,c=t.children,m=F1(t.data,{graphicalItems:r,dataStartIndex:u,dataEndIndex:l}),d=m.length,g=qb(p,o),f=-1;return r.reduce(function(y,v){var h=v.type.defaultProps!==void 0?H(H({},v.type.defaultProps),v.props):v.props,_=h[i],w=ZS("number");if(!y[_]){f++;var x;return g?x=c0(0,d):s&&s[_]&&s[_].hasStack?(x=Db(s[_].stackGroups,u,l),x=Df(c,x,_,o)):(x=ef(w,Mb(m,r.filter(function(S){var O,k,C=i in S.props?S.props[i]:(O=S.type.defaultProps)===null||O===void 0?void 0:O[i],N="hide"in S.props?S.props.hide:(k=S.type.defaultProps)===null||k===void 0?void 0:k.hide;return C===_&&!N}),"number",p),a.defaultProps.allowDataOverflow),x=Df(c,x,_,o)),H(H({},y),{},ee({},_,H(H({axisType:o},a.defaultProps),{},{hide:!0,orientation:_n(Joe,"".concat(o,".").concat(f%2),null),domain:x,originalDomain:w,isCategorical:g,layout:p})))}return y},{})},oie=function(t,n){var r=n.axisType,a=r===void 0?"xAxis":r,o=n.AxisComp,i=n.graphicalItems,s=n.stackGroups,u=n.dataStartIndex,l=n.dataEndIndex,p=t.children,c="".concat(a,"Id"),m=Wt(p,o),d={};return m&&m.length?d=rie(t,{axes:m,graphicalItems:i,axisType:a,axisIdKey:c,stackGroups:s,dataStartIndex:u,dataEndIndex:l}):i&&i.length&&(d=aie(t,{Axis:o,graphicalItems:i,axisType:a,axisIdKey:c,stackGroups:s,dataStartIndex:u,dataEndIndex:l})),d},iie=function(t){var n=oa(t),r=Ar(n,!1,!0);return{tooltipTicks:r,orderedTooltipTicks:O9(r,function(a){return a.coordinate}),tooltipAxis:n,tooltipAxisBandSize:e0(n,r)}},Xy=function(t){var n=t.children,r=t.defaultShowTooltip,a=Qt(n,Xi),o=0,i=0;return t.data&&t.data.length!==0&&(i=t.data.length-1),a&&a.props&&(a.props.startIndex>=0&&(o=a.props.startIndex),a.props.endIndex>=0&&(i=a.props.endIndex)),{chartX:0,chartY:0,dataStartIndex:o,dataEndIndex:i,activeTooltipIndex:-1,isTooltipActive:!!r}},sie=function(t){return!t||!t.length?!1:t.some(function(n){var r=Nr(n&&n.type);return r&&r.indexOf("Bar")>=0})},Yy=function(t){return t==="horizontal"?{numericAxisName:"yAxis",cateAxisName:"xAxis"}:t==="vertical"?{numericAxisName:"xAxis",cateAxisName:"yAxis"}:t==="centric"?{numericAxisName:"radiusAxis",cateAxisName:"angleAxis"}:{numericAxisName:"angleAxis",cateAxisName:"radiusAxis"}},uie=function(t,n){var r=t.props,a=t.graphicalItems,o=t.xAxisMap,i=o===void 0?{}:o,s=t.yAxisMap,u=s===void 0?{}:s,l=r.width,p=r.height,c=r.children,m=r.margin||{},d=Qt(c,Xi),g=Qt(c,yi),f=Object.keys(u).reduce(function(x,S){var O=u[S],k=O.orientation;return!O.mirror&&!O.hide?H(H({},x),{},ee({},k,x[k]+O.width)):x},{left:m.left||0,right:m.right||0}),y=Object.keys(i).reduce(function(x,S){var O=i[S],k=O.orientation;return!O.mirror&&!O.hide?H(H({},x),{},ee({},k,_n(x,"".concat(k))+O.height)):x},{top:m.top||0,bottom:m.bottom||0}),v=H(H({},y),f),h=v.bottom;d&&(v.bottom+=d.props.height||Xi.defaultProps.height),g&&n&&(v=BY(v,a,r,n));var _=l-v.left-v.right,w=p-v.top-v.bottom;return H(H({brushBottom:h},v),{},{width:Math.max(_,0),height:Math.max(w,0)})},lie=function(t,n){if(n==="xAxis")return t[n].width;if(n==="yAxis")return t[n].height},z1=function(t){var n=t.chartName,r=t.GraphicalChild,a=t.defaultTooltipEventType,o=a===void 0?"axis":a,i=t.validateTooltipEventTypes,s=i===void 0?["axis"]:i,u=t.axisComponents,l=t.legendContent,p=t.formatAxisMap,c=t.defaultProps,m=function(v,h){var _=h.graphicalItems,w=h.stackGroups,x=h.offset,S=h.updateId,O=h.dataStartIndex,k=h.dataEndIndex,C=v.barSize,N=v.layout,T=v.barGap,A=v.barCategoryGap,$=v.maxBarSize,R=Yy(N),q=R.numericAxisName,M=R.cateAxisName,D=sie(_),j=[];return _.forEach(function(I,B){var U=F1(v.data,{graphicalItems:[I],dataStartIndex:O,dataEndIndex:k}),F=I.type.defaultProps!==void 0?H(H({},I.type.defaultProps),I.props):I.props,Z=F.dataKey,ie=F.maxBarSize,he=F["".concat(q,"Id")],be=F["".concat(M,"Id")],J={},ue=u.reduce(function(Ba,Fa){var X1=h["".concat(Fa.axisType,"Map")],y5=F["".concat(Fa.axisType,"Id")];X1&&X1[y5]||Fa.axisType==="zAxis"||Eo();var g5=X1[y5];return H(H({},Ba),{},ee(ee({},Fa.axisType,g5),"".concat(Fa.axisType,"Ticks"),Ar(g5)))},J),W=ue[M],K=ue["".concat(M,"Ticks")],X=w&&w[he]&&w[he].hasStack&&nQ(I,w[he].stackGroups),L=Nr(I.type).indexOf("Bar")>=0,pe=e0(W,K),re=[],Re=D&&HY({barSize:C,stackGroups:w,totalSize:lie(ue,M)});if(L){var $e,Ze,Xn=ne(ie)?$:ie,On=($e=(Ze=e0(W,K,!0))!==null&&Ze!==void 0?Ze:Xn)!==null&&$e!==void 0?$e:0;re=GY({barGap:T,barCategoryGap:A,bandSize:On!==pe?On:pe,sizeList:Re[be],maxBarSize:Xn}),On!==pe&&(re=re.map(function(Ba){return H(H({},Ba),{},{position:H(H({},Ba.position),{},{offset:Ba.position.offset-On/2})})}))}var Gl=I&&I.type&&I.type.getComposedData;Gl&&j.push({props:H(H({},Gl(H(H({},ue),{},{displayedData:U,props:v,dataKey:Z,item:I,bandSize:pe,barPosition:re,offset:x,stackedData:X,layout:N,dataStartIndex:O,dataEndIndex:k}))),{},ee(ee(ee({key:I.key||"item-".concat(B)},q,ue[q]),M,ue[M]),"animationId",S)),childIndex:DM(I,v.children),item:I})}),j},d=function(v,h){var _=v.props,w=v.dataStartIndex,x=v.dataEndIndex,S=v.updateId;if(!_2({props:_}))return null;var O=_.children,k=_.layout,C=_.stackOffset,N=_.data,T=_.reverseStackOrder,A=Yy(k),$=A.numericAxisName,R=A.cateAxisName,q=Wt(O,r),M=JY(N,q,"".concat($,"Id"),"".concat(R,"Id"),C,T),D=u.reduce(function(F,Z){var ie="".concat(Z.axisType,"Map");return H(H({},F),{},ee({},ie,oie(_,H(H({},Z),{},{graphicalItems:q,stackGroups:Z.axisType===$&&M,dataStartIndex:w,dataEndIndex:x}))))},{}),j=uie(H(H({},D),{},{props:_,graphicalItems:q}),h==null?void 0:h.legendBBox);Object.keys(D).forEach(function(F){D[F]=p(_,D[F],j,F.replace("Map",""),n)});var I=D["".concat(R,"Map")],B=iie(I),U=m(_,H(H({},D),{},{dataStartIndex:w,dataEndIndex:x,updateId:S,graphicalItems:q,stackGroups:M,offset:j}));return H(H({formattedGraphicalItems:U,graphicalItems:q,offset:j,stackGroups:M},B),D)},g=function(y){function v(h){var _,w,x;return Boe(this,v),x=Uoe(this,v,[h]),ee(x,"eventEmitterSymbol",Symbol("rechartsEventEmitter")),ee(x,"accessibilityManager",new Aoe),ee(x,"handleLegendBBoxUpdate",function(S){if(S){var O=x.state,k=O.dataStartIndex,C=O.dataEndIndex,N=O.updateId;x.setState(H({legendBBox:S},d({props:x.props,dataStartIndex:k,dataEndIndex:C,updateId:N},H(H({},x.state),{},{legendBBox:S}))))}}),ee(x,"handleReceiveSyncEvent",function(S,O,k){if(x.props.syncId===S){if(k===x.eventEmitterSymbol&&typeof x.props.syncMethod!="function")return;x.applySyncEvent(O)}}),ee(x,"handleBrushChange",function(S){var O=S.startIndex,k=S.endIndex;if(O!==x.state.dataStartIndex||k!==x.state.dataEndIndex){var C=x.state.updateId;x.setState(function(){return H({dataStartIndex:O,dataEndIndex:k},d({props:x.props,dataStartIndex:O,dataEndIndex:k,updateId:C},x.state))}),x.triggerSyncEvent({dataStartIndex:O,dataEndIndex:k})}}),ee(x,"handleMouseEnter",function(S){var O=x.getMouseInfo(S);if(O){var k=H(H({},O),{},{isTooltipActive:!0});x.setState(k),x.triggerSyncEvent(k);var C=x.props.onMouseEnter;oe(C)&&C(k,S)}}),ee(x,"triggeredAfterMouseMove",function(S){var O=x.getMouseInfo(S),k=O?H(H({},O),{},{isTooltipActive:!0}):{isTooltipActive:!1};x.setState(k),x.triggerSyncEvent(k);var C=x.props.onMouseMove;oe(C)&&C(k,S)}),ee(x,"handleItemMouseEnter",function(S){x.setState(function(){return{isTooltipActive:!0,activeItem:S,activePayload:S.tooltipPayload,activeCoordinate:S.tooltipPosition||{x:S.cx,y:S.cy}}})}),ee(x,"handleItemMouseLeave",function(){x.setState(function(){return{isTooltipActive:!1}})}),ee(x,"handleMouseMove",function(S){S.persist(),x.throttleTriggeredAfterMouseMove(S)}),ee(x,"handleMouseLeave",function(S){x.throttleTriggeredAfterMouseMove.cancel();var O={isTooltipActive:!1};x.setState(O),x.triggerSyncEvent(O);var k=x.props.onMouseLeave;oe(k)&&k(O,S)}),ee(x,"handleOuterEvent",function(S){var O=IM(S),k=_n(x.props,"".concat(O));if(O&&oe(k)){var C,N;/.*touch.*/i.test(O)?N=x.getMouseInfo(S.changedTouches[0]):N=x.getMouseInfo(S),k((C=N)!==null&&C!==void 0?C:{},S)}}),ee(x,"handleClick",function(S){var O=x.getMouseInfo(S);if(O){var k=H(H({},O),{},{isTooltipActive:!0});x.setState(k),x.triggerSyncEvent(k);var C=x.props.onClick;oe(C)&&C(k,S)}}),ee(x,"handleMouseDown",function(S){var O=x.props.onMouseDown;if(oe(O)){var k=x.getMouseInfo(S);O(k,S)}}),ee(x,"handleMouseUp",function(S){var O=x.props.onMouseUp;if(oe(O)){var k=x.getMouseInfo(S);O(k,S)}}),ee(x,"handleTouchMove",function(S){S.changedTouches!=null&&S.changedTouches.length>0&&x.throttleTriggeredAfterMouseMove(S.changedTouches[0])}),ee(x,"handleTouchStart",function(S){S.changedTouches!=null&&S.changedTouches.length>0&&x.handleMouseDown(S.changedTouches[0])}),ee(x,"handleTouchEnd",function(S){S.changedTouches!=null&&S.changedTouches.length>0&&x.handleMouseUp(S.changedTouches[0])}),ee(x,"handleDoubleClick",function(S){var O=x.props.onDoubleClick;if(oe(O)){var k=x.getMouseInfo(S);O(k,S)}}),ee(x,"handleContextMenu",function(S){var O=x.props.onContextMenu;if(oe(O)){var k=x.getMouseInfo(S);O(k,S)}}),ee(x,"triggerSyncEvent",function(S){x.props.syncId!==void 0&&id.emit(sd,x.props.syncId,S,x.eventEmitterSymbol)}),ee(x,"applySyncEvent",function(S){var O=x.props,k=O.layout,C=O.syncMethod,N=x.state.updateId,T=S.dataStartIndex,A=S.dataEndIndex;if(S.dataStartIndex!==void 0||S.dataEndIndex!==void 0)x.setState(H({dataStartIndex:T,dataEndIndex:A},d({props:x.props,dataStartIndex:T,dataEndIndex:A,updateId:N},x.state)));else if(S.activeTooltipIndex!==void 0){var $=S.chartX,R=S.chartY,q=S.activeTooltipIndex,M=x.state,D=M.offset,j=M.tooltipTicks;if(!D)return;if(typeof C=="function")q=C(j,S);else if(C==="value"){q=-1;for(var I=0;I=0){var X,L;if($.dataKey&&!$.allowDuplicatedCategory){var pe=typeof $.dataKey=="function"?K:"payload.".concat($.dataKey.toString());X=Pp(I,pe,q),L=B&&U&&Pp(U,pe,q)}else X=I==null?void 0:I[R],L=B&&U&&U[R];if(be||he){var re=S.props.activeIndex!==void 0?S.props.activeIndex:R;return[P.cloneElement(S,H(H(H({},C.props),ue),{},{activeIndex:re})),null,null]}if(!ne(X))return[W].concat(us(x.renderActivePoints({item:C,activePoint:X,basePoint:L,childIndex:R,isRange:B})))}else{var Re,$e=(Re=x.getItemByXY(x.state.activeCoordinate))!==null&&Re!==void 0?Re:{graphicalItem:W},Ze=$e.graphicalItem,Xn=Ze.item,On=Xn===void 0?S:Xn,Gl=Ze.childIndex,Ba=H(H(H({},C.props),ue),{},{activeIndex:Gl});return[P.cloneElement(On,Ba),null,null]}return B?[W,null,null]:[W,null]}),ee(x,"renderCustomized",function(S,O,k){return P.cloneElement(S,H(H({key:"recharts-customized-".concat(k)},x.props),x.state))}),ee(x,"renderMap",{CartesianGrid:{handler:Oc,once:!0},ReferenceArea:{handler:x.renderReferenceElement},ReferenceLine:{handler:Oc},ReferenceDot:{handler:x.renderReferenceElement},XAxis:{handler:Oc},YAxis:{handler:Oc},Brush:{handler:x.renderBrush,once:!0},Bar:{handler:x.renderGraphicChild},Line:{handler:x.renderGraphicChild},Area:{handler:x.renderGraphicChild},Radar:{handler:x.renderGraphicChild},RadialBar:{handler:x.renderGraphicChild},Scatter:{handler:x.renderGraphicChild},Pie:{handler:x.renderGraphicChild},Funnel:{handler:x.renderGraphicChild},Tooltip:{handler:x.renderCursor,once:!0},PolarGrid:{handler:x.renderPolarGrid,once:!0},PolarAngleAxis:{handler:x.renderPolarAxis},PolarRadiusAxis:{handler:x.renderPolarAxis},Customized:{handler:x.renderCustomized}}),x.clipPathId="".concat((_=h.id)!==null&&_!==void 0?_:$o("recharts"),"-clip"),x.throttleTriggeredAfterMouseMove=$w(x.triggeredAfterMouseMove,(w=h.throttleDelay)!==null&&w!==void 0?w:1e3/60),x.state={},x}return Koe(v,y),zoe(v,[{key:"componentDidMount",value:function(){var _,w;this.addListener(),this.accessibilityManager.setDetails({container:this.container,offset:{left:(_=this.props.margin.left)!==null&&_!==void 0?_:0,top:(w=this.props.margin.top)!==null&&w!==void 0?w:0},coordinateList:this.state.tooltipTicks,mouseHandlerCallback:this.triggeredAfterMouseMove,layout:this.props.layout}),this.displayDefaultTooltip()}},{key:"displayDefaultTooltip",value:function(){var _=this.props,w=_.children,x=_.data,S=_.height,O=_.layout,k=Qt(w,Zn);if(k){var C=k.props.defaultIndex;if(!(typeof C!="number"||C<0||C>this.state.tooltipTicks.length-1)){var N=this.state.tooltipTicks[C]&&this.state.tooltipTicks[C].value,T=Gf(this.state,x,C,N),A=this.state.tooltipTicks[C].coordinate,$=(this.state.offset.top+S)/2,R=O==="horizontal",q=R?{x:A,y:$}:{y:A,x:$},M=this.state.formattedGraphicalItems.find(function(j){var I=j.item;return I.type.name==="Scatter"});M&&(q=H(H({},q),M.props.points[C].tooltipPosition),T=M.props.points[C].tooltipPayload);var D={activeTooltipIndex:C,isTooltipActive:!0,activeLabel:N,activePayload:T,activeCoordinate:q};this.setState(D),this.renderCursor(k),this.accessibilityManager.setIndex(C)}}}},{key:"getSnapshotBeforeUpdate",value:function(_,w){if(!this.props.accessibilityLayer)return null;if(this.state.tooltipTicks!==w.tooltipTicks&&this.accessibilityManager.setDetails({coordinateList:this.state.tooltipTicks}),this.props.layout!==_.layout&&this.accessibilityManager.setDetails({layout:this.props.layout}),this.props.margin!==_.margin){var x,S;this.accessibilityManager.setDetails({offset:{left:(x=this.props.margin.left)!==null&&x!==void 0?x:0,top:(S=this.props.margin.top)!==null&&S!==void 0?S:0}})}return null}},{key:"componentDidUpdate",value:function(_){v3([Qt(_.children,Zn)],[Qt(this.props.children,Zn)])||this.displayDefaultTooltip()}},{key:"componentWillUnmount",value:function(){this.removeListener(),this.throttleTriggeredAfterMouseMove.cancel()}},{key:"getTooltipEventType",value:function(){var _=Qt(this.props.children,Zn);if(_&&typeof _.props.shared=="boolean"){var w=_.props.shared?"axis":"item";return s.indexOf(w)>=0?w:o}return o}},{key:"getMouseInfo",value:function(_){if(!this.container)return null;var w=this.container,x=w.getBoundingClientRect(),S=pW(x),O={chartX:Math.round(_.pageX-S.left),chartY:Math.round(_.pageY-S.top)},k=x.width/w.offsetWidth||1,C=this.inRange(O.chartX,O.chartY,k);if(!C)return null;var N=this.state,T=N.xAxisMap,A=N.yAxisMap,$=this.getTooltipEventType(),R=Ky(this.state,this.props.data,this.props.layout,C);if($!=="axis"&&T&&A){var q=oa(T).scale,M=oa(A).scale,D=q&&q.invert?q.invert(O.chartX):null,j=M&&M.invert?M.invert(O.chartY):null;return H(H({},O),{},{xValue:D,yValue:j},R)}return R?H(H({},O),R):null}},{key:"inRange",value:function(_,w){var x=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,S=this.props.layout,O=_/x,k=w/x;if(S==="horizontal"||S==="vertical"){var C=this.state.offset,N=O>=C.left&&O<=C.left+C.width&&k>=C.top&&k<=C.top+C.height;return N?{x:O,y:k}:null}var T=this.state,A=T.angleAxisMap,$=T.radiusAxisMap;if(A&&$){var R=oa(A);return A6({x:O,y:k},R)}return null}},{key:"parseEventsOfWrapper",value:function(){var _=this.props.children,w=this.getTooltipEventType(),x=Qt(_,Zn),S={};x&&w==="axis"&&(x.props.trigger==="click"?S={onClick:this.handleClick}:S={onMouseEnter:this.handleMouseEnter,onDoubleClick:this.handleDoubleClick,onMouseMove:this.handleMouseMove,onMouseLeave:this.handleMouseLeave,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd,onContextMenu:this.handleContextMenu});var O=Op(this.props,this.handleOuterEvent);return H(H({},O),S)}},{key:"addListener",value:function(){id.on(sd,this.handleReceiveSyncEvent)}},{key:"removeListener",value:function(){id.removeListener(sd,this.handleReceiveSyncEvent)}},{key:"filterFormatItem",value:function(_,w,x){for(var S=this.state.formattedGraphicalItems,O=0,k=S.length;O");return e}const Ln=P.forwardRef(({id:e,className:t,children:n,config:r,...a},o)=>{const i=P.useId(),s=`chart-${e||i.replace(/:/g,"")}`;return b.jsx(eP.Provider,{value:{config:r},children:b.jsxs("div",{"data-chart":s,ref:o,className:Pe("flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none",t),...a,children:[b.jsx(mie,{id:s,config:r}),b.jsx(aW,{children:n})]})})});Ln.displayName="Chart";const mie=({id:e,config:t})=>{const n=Object.entries(t).filter(([r,a])=>a.theme||a.color);return n.length?b.jsx("style",{dangerouslySetInnerHTML:{__html:Object.entries(pie).map(([r,a])=>` + `).concat(+(Math.abs(c)>180),",").concat(+(u<=m),`, + `).concat(_.x,",").concat(_.y," Z")}else v+="L ".concat(n,",").concat(r," Z");return v},rW=function(t){var n=t.cx,r=t.cy,a=t.innerRadius,i=t.outerRadius,u=t.cornerRadius,l=t.forceCornerRadius,c=t.cornerIsExternal,m=t.startAngle,f=t.endAngle,d=mr(f-m),v=Tp({cx:n,cy:r,radius:i,angle:m,sign:d,cornerRadius:u,cornerIsExternal:c}),_=v.circleTangency,w=v.lineTangency,g=v.theta,y=Tp({cx:n,cy:r,radius:i,angle:f,sign:-d,cornerRadius:u,cornerIsExternal:c}),b=y.circleTangency,O=y.lineTangency,C=y.theta,k=c?Math.abs(m-f):Math.abs(m-f)-g-C;if(k<0)return l?"M ".concat(w.x,",").concat(w.y,` + a`).concat(u,",").concat(u,",0,0,1,").concat(u*2,`,0 + a`).concat(u,",").concat(u,",0,0,1,").concat(-u*2,`,0 + `):NC({cx:n,cy:r,innerRadius:a,outerRadius:i,startAngle:m,endAngle:f});var P="M ".concat(w.x,",").concat(w.y,` + A`).concat(u,",").concat(u,",0,0,").concat(+(d<0),",").concat(_.x,",").concat(_.y,` + A`).concat(i,",").concat(i,",0,").concat(+(k>180),",").concat(+(d<0),",").concat(b.x,",").concat(b.y,` + A`).concat(u,",").concat(u,",0,0,").concat(+(d<0),",").concat(O.x,",").concat(O.y,` + `);if(a>0){var A=Tp({cx:n,cy:r,radius:a,angle:m,sign:d,isExternal:!0,cornerRadius:u,cornerIsExternal:c}),T=A.circleTangency,q=A.lineTangency,j=A.theta,B=Tp({cx:n,cy:r,radius:a,angle:f,sign:-d,isExternal:!0,cornerRadius:u,cornerIsExternal:c}),$=B.circleTangency,M=B.lineTangency,H=B.theta,F=c?Math.abs(m-f):Math.abs(m-f)-j-H;if(F<0&&u===0)return"".concat(P,"L").concat(n,",").concat(r,"Z");P+="L".concat(M.x,",").concat(M.y,` + A`).concat(u,",").concat(u,",0,0,").concat(+(d<0),",").concat($.x,",").concat($.y,` + A`).concat(a,",").concat(a,",0,").concat(+(F>180),",").concat(+(d>0),",").concat(T.x,",").concat(T.y,` + A`).concat(u,",").concat(u,",0,0,").concat(+(d<0),",").concat(q.x,",").concat(q.y,"Z")}else P+="L".concat(n,",").concat(r,"Z");return P},aW={cx:0,cy:0,innerRadius:0,outerRadius:0,startAngle:0,endAngle:0,cornerRadius:0,forceCornerRadius:!1,cornerIsExternal:!1},qC=function(t){var n=Vw(Vw({},aW),t),r=n.cx,a=n.cy,i=n.innerRadius,u=n.outerRadius,l=n.cornerRadius,c=n.forceCornerRadius,m=n.cornerIsExternal,f=n.startAngle,d=n.endAngle,v=n.className;if(u0&&Math.abs(f-d)<360?y=rW({cx:r,cy:a,innerRadius:i,outerRadius:u,cornerRadius:Math.min(g,w/2),forceCornerRadius:c,cornerIsExternal:m,startAngle:f,endAngle:d}):y=NC({cx:r,cy:a,innerRadius:i,outerRadius:u,startAngle:f,endAngle:d}),L.createElement("path",U5({},Te(n,!0),{className:_,d:y,role:"img"}))};function Rl(e){"@babel/helpers - typeof";return Rl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Rl(e)}function W5(){return W5=Object.assign?Object.assign.bind():function(e){for(var t=1;thW.call(e,t));function oi(e,t){return e===t||!e&&!t&&e!==e&&t!==t}const gW="__v",xW="__o",wW="_owner",{getOwnPropertyDescriptor:tb,keys:nb}=Object;function bW(e,t){return e.byteLength===t.byteLength&&S1(new Uint8Array(e),new Uint8Array(t))}function SW(e,t,n){let r=e.length;if(t.length!==r)return!1;for(;r-- >0;)if(!n.equals(e[r],t[r],r,r,e,t,n))return!1;return!0}function PW(e,t){return e.byteLength===t.byteLength&&S1(new Uint8Array(e.buffer,e.byteOffset,e.byteLength),new Uint8Array(t.buffer,t.byteOffset,t.byteLength))}function OW(e,t){return oi(e.getTime(),t.getTime())}function kW(e,t){return e.name===t.name&&e.message===t.message&&e.cause===t.cause&&e.stack===t.stack}function CW(e,t){return e===t}function rb(e,t,n){const r=e.size;if(r!==t.size)return!1;if(!r)return!0;const a=new Array(r),i=e.entries();let u,l,c=0;for(;(u=i.next())&&!u.done;){const m=t.entries();let f=!1,d=0;for(;(l=m.next())&&!l.done;){if(a[d]){d++;continue}const v=u.value,_=l.value;if(n.equals(v[0],_[0],c,d,e,t,n)&&n.equals(v[1],_[1],v[0],_[0],e,t,n)){f=a[d]=!0;break}d++}if(!f)return!1;c++}return!0}const AW=oi;function EW(e,t,n){const r=nb(e);let a=r.length;if(nb(t).length!==a)return!1;for(;a-- >0;)if(!jC(e,t,n,r[a]))return!1;return!0}function Wu(e,t,n){const r=eb(e);let a=r.length;if(eb(t).length!==a)return!1;let i,u,l;for(;a-- >0;)if(i=r[a],!jC(e,t,n,i)||(u=tb(e,i),l=tb(t,i),(u||l)&&(!u||!l||u.configurable!==l.configurable||u.enumerable!==l.enumerable||u.writable!==l.writable)))return!1;return!0}function RW(e,t){return oi(e.valueOf(),t.valueOf())}function TW(e,t){return e.source===t.source&&e.flags===t.flags}function ab(e,t,n){const r=e.size;if(r!==t.size)return!1;if(!r)return!0;const a=new Array(r),i=e.values();let u,l;for(;(u=i.next())&&!u.done;){const c=t.values();let m=!1,f=0;for(;(l=c.next())&&!l.done;){if(!a[f]&&n.equals(u.value,l.value,u.value,l.value,e,t,n)){m=a[f]=!0;break}f++}if(!m)return!1}return!0}function S1(e,t){let n=e.byteLength;if(t.byteLength!==n||e.byteOffset!==t.byteOffset)return!1;for(;n-- >0;)if(e[n]!==t[n])return!1;return!0}function NW(e,t){return e.hostname===t.hostname&&e.pathname===t.pathname&&e.protocol===t.protocol&&e.port===t.port&&e.hash===t.hash&&e.username===t.username&&e.password===t.password}function jC(e,t,n,r){return(r===wW||r===xW||r===gW)&&(e.$$typeof||t.$$typeof)?!0:_W(t,r)&&n.equals(e[r],t[r],r,r,e,t,n)}const qW="[object ArrayBuffer]",jW="[object Arguments]",MW="[object Boolean]",IW="[object DataView]",DW="[object Date]",$W="[object Error]",LW="[object Map]",HW="[object Number]",GW="[object Object]",FW="[object RegExp]",BW="[object Set]",zW="[object String]",UW={"[object Int8Array]":!0,"[object Uint8Array]":!0,"[object Uint8ClampedArray]":!0,"[object Int16Array]":!0,"[object Uint16Array]":!0,"[object Int32Array]":!0,"[object Uint32Array]":!0,"[object Float16Array]":!0,"[object Float32Array]":!0,"[object Float64Array]":!0,"[object BigInt64Array]":!0,"[object BigUint64Array]":!0},WW="[object URL]",VW=Object.prototype.toString;function KW({areArrayBuffersEqual:e,areArraysEqual:t,areDataViewsEqual:n,areDatesEqual:r,areErrorsEqual:a,areFunctionsEqual:i,areMapsEqual:u,areNumbersEqual:l,areObjectsEqual:c,arePrimitiveWrappersEqual:m,areRegExpsEqual:f,areSetsEqual:d,areTypedArraysEqual:v,areUrlsEqual:_,unknownTagComparators:w}){return function(y,b,O){if(y===b)return!0;if(y==null||b==null)return!1;const C=typeof y;if(C!==typeof b)return!1;if(C!=="object")return C==="number"?l(y,b,O):C==="function"?i(y,b,O):!1;const k=y.constructor;if(k!==b.constructor)return!1;if(k===Object)return c(y,b,O);if(Array.isArray(y))return t(y,b,O);if(k===Date)return r(y,b,O);if(k===RegExp)return f(y,b,O);if(k===Map)return u(y,b,O);if(k===Set)return d(y,b,O);const P=VW.call(y);if(P===DW)return r(y,b,O);if(P===FW)return f(y,b,O);if(P===LW)return u(y,b,O);if(P===BW)return d(y,b,O);if(P===GW)return typeof y.then!="function"&&typeof b.then!="function"&&c(y,b,O);if(P===WW)return _(y,b,O);if(P===$W)return a(y,b,O);if(P===jW)return c(y,b,O);if(UW[P])return v(y,b,O);if(P===qW)return e(y,b,O);if(P===IW)return n(y,b,O);if(P===MW||P===HW||P===zW)return m(y,b,O);if(w){let A=w[P];if(!A){const T=yW(y);T&&(A=w[T])}if(A)return A(y,b,O)}return!1}}function XW({circular:e,createCustomConfig:t,strict:n}){let r={areArrayBuffersEqual:bW,areArraysEqual:n?Wu:SW,areDataViewsEqual:PW,areDatesEqual:OW,areErrorsEqual:kW,areFunctionsEqual:CW,areMapsEqual:n?S9(rb,Wu):rb,areNumbersEqual:AW,areObjectsEqual:n?Wu:EW,arePrimitiveWrappersEqual:RW,areRegExpsEqual:TW,areSetsEqual:n?S9(ab,Wu):ab,areTypedArraysEqual:n?S9(S1,Wu):S1,areUrlsEqual:NW,unknownTagComparators:void 0};if(t&&(r=Object.assign({},r,t(r))),e){const a=qp(r.areArraysEqual),i=qp(r.areMapsEqual),u=qp(r.areObjectsEqual),l=qp(r.areSetsEqual);r=Object.assign({},r,{areArraysEqual:a,areMapsEqual:i,areObjectsEqual:u,areSetsEqual:l})}return r}function YW(e){return function(t,n,r,a,i,u,l){return e(t,n,l)}}function QW({circular:e,comparator:t,createState:n,equals:r,strict:a}){if(n)return function(l,c){const{cache:m=e?new WeakMap:void 0,meta:f}=n();return t(l,c,{cache:m,equals:r,meta:f,strict:a})};if(e)return function(l,c){return t(l,c,{cache:new WeakMap,equals:r,meta:void 0,strict:a})};const i={cache:void 0,equals:r,meta:void 0,strict:a};return function(l,c){return t(l,c,i)}}const ZW=po();po({strict:!0});po({circular:!0});po({circular:!0,strict:!0});po({createInternalComparator:()=>oi});po({strict:!0,createInternalComparator:()=>oi});po({circular:!0,createInternalComparator:()=>oi});po({circular:!0,createInternalComparator:()=>oi,strict:!0});function po(e={}){const{circular:t=!1,createInternalComparator:n,createState:r,strict:a=!1}=e,i=XW(e),u=KW(i),l=n?n(u):YW(u);return QW({circular:t,comparator:u,createState:r,equals:l,strict:a})}function JW(e){typeof requestAnimationFrame<"u"&&requestAnimationFrame(e)}function ob(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,n=-1,r=function a(i){n<0&&(n=i),i-n>t?(e(i),n=-1):JW(a)};requestAnimationFrame(r)}function V5(e){"@babel/helpers - typeof";return V5=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},V5(e)}function eV(e){return aV(e)||rV(e)||nV(e)||tV()}function tV(){throw new TypeError(`Invalid attempt to destructure non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function nV(e,t){if(e){if(typeof e=="string")return ib(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return ib(e,t)}}function ib(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n1?1:b<0?0:b},g=function(b){for(var O=b>1?1:b,C=O,k=0;k<8;++k){var P=d(C)-O,A=_(C);if(Math.abs(P-O)0&&arguments[0]!==void 0?arguments[0]:{},n=t.stiff,r=n===void 0?100:n,a=t.damping,i=a===void 0?8:a,u=t.dt,l=u===void 0?17:u,c=function(f,d,v){var _=-(f-d)*r,w=v*i,g=v+(_-w)*l/1e3,y=v*l/1e3+f;return Math.abs(y-d)e.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function MV(e,t){if(e==null)return{};var n={},r=Object.keys(e),a,i;for(i=0;i=0)&&(n[a]=e[a]);return n}function P9(e){return LV(e)||$V(e)||DV(e)||IV()}function IV(){throw new TypeError(`Invalid attempt to spread non-iterable instance. +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}function DV(e,t){if(e){if(typeof e=="string")return Z5(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);if(n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set")return Array.from(e);if(n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n))return Z5(e,t)}}function $V(e){if(typeof Symbol<"u"&&e[Symbol.iterator]!=null||e["@@iterator"]!=null)return Array.from(e)}function LV(e){if(Array.isArray(e))return Z5(e)}function Z5(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n"u"||!Reflect.construct||Reflect.construct.sham)return!1;if(typeof Proxy=="function")return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,[],function(){})),!0}catch{return!1}}function k1(e){return k1=Object.setPrototypeOf?Object.getPrototypeOf.bind():function(n){return n.__proto__||Object.getPrototypeOf(n)},k1(e)}var yr=(function(e){zV(n,e);var t=UV(n);function n(r,a){var i;HV(this,n),i=t.call(this,r,a);var u=i.props,l=u.isActive,c=u.attributeName,m=u.from,f=u.to,d=u.steps,v=u.children,_=u.duration;if(i.handleStyleChange=i.handleStyleChange.bind(tv(i)),i.changeStyle=i.changeStyle.bind(tv(i)),!l||_<=0)return i.state={style:{}},typeof v=="function"&&(i.state={style:f}),ev(i);if(d&&d.length)i.state={style:d[0].style};else if(m){if(typeof v=="function")return i.state={style:m},ev(i);i.state={style:c?Yu({},c,m):m}}else i.state={style:{}};return i}return FV(n,[{key:"componentDidMount",value:function(){var a=this.props,i=a.isActive,u=a.canBegin;this.mounted=!0,!(!i||!u)&&this.runAnimation(this.props)}},{key:"componentDidUpdate",value:function(a){var i=this.props,u=i.isActive,l=i.canBegin,c=i.attributeName,m=i.shouldReAnimate,f=i.to,d=i.from,v=this.state.style;if(l){if(!u){var _={style:c?Yu({},c,f):f};this.state&&v&&(c&&v[c]!==f||!c&&v!==f)&&this.setState(_);return}if(!(ZW(a.to,f)&&a.canBegin&&a.isActive)){var w=!a.canBegin||!a.isActive;this.manager&&this.manager.stop(),this.stopJSAnimation&&this.stopJSAnimation();var g=w||m?d:a.to;if(this.state&&v){var y={style:c?Yu({},c,g):g};(c&&v[c]!==g||!c&&v!==g)&&this.setState(y)}this.runAnimation(or(or({},this.props),{},{from:g,begin:0}))}}}},{key:"componentWillUnmount",value:function(){this.mounted=!1;var a=this.props.onAnimationEnd;this.unSubscribe&&this.unSubscribe(),this.manager&&(this.manager.stop(),this.manager=null),this.stopJSAnimation&&this.stopJSAnimation(),a&&a()}},{key:"handleStyleChange",value:function(a){this.changeStyle(a)}},{key:"changeStyle",value:function(a){this.mounted&&this.setState({style:a})}},{key:"runJSAnimation",value:function(a){var i=this,u=a.from,l=a.to,c=a.duration,m=a.easing,f=a.begin,d=a.onAnimationEnd,v=a.onAnimationStart,_=NV(u,l,wV(m),c,this.changeStyle),w=function(){i.stopJSAnimation=_()};this.manager.start([v,f,w,c,d])}},{key:"runStepAnimation",value:function(a){var i=this,u=a.steps,l=a.begin,c=a.onAnimationStart,m=u[0],f=m.style,d=m.duration,v=d===void 0?0:d,_=function(g,y,b){if(b===0)return g;var O=y.duration,C=y.easing,k=C===void 0?"ease":C,P=y.style,A=y.properties,T=y.onAnimationEnd,q=b>0?u[b-1]:y,j=A||Object.keys(P);if(typeof k=="function"||k==="spring")return[].concat(P9(g),[i.runJSAnimation.bind(i,{from:q.style,to:P,duration:O,easing:k}),O]);var B=lb(j,O,k),$=or(or(or({},q.style),P),{},{transition:B});return[].concat(P9(g),[$,O,T]).filter(lV)};return this.manager.start([c].concat(P9(u.reduce(_,[f,Math.max(v,l)])),[a.onAnimationEnd]))}},{key:"runAnimation",value:function(a){this.manager||(this.manager=oV());var i=a.begin,u=a.duration,l=a.attributeName,c=a.to,m=a.easing,f=a.onAnimationStart,d=a.onAnimationEnd,v=a.steps,_=a.children,w=this.manager;if(this.unSubscribe=w.subscribe(this.handleStyleChange),typeof m=="function"||typeof _=="function"||m==="spring"){this.runJSAnimation(a);return}if(v.length>1){this.runStepAnimation(a);return}var g=l?Yu({},l,c):c,y=lb(Object.keys(g),u,m);w.start([f,i,or(or({},g),{},{transition:y}),u,d])}},{key:"render",value:function(){var a=this.props,i=a.children;a.begin;var u=a.duration;a.attributeName,a.easing;var l=a.isActive;a.steps,a.from,a.to,a.canBegin,a.onAnimationEnd,a.shouldReAnimate,a.onAnimationReStart;var c=jV(a,qV),m=R.Children.count(i),f=this.state.style;if(typeof i=="function")return i(f);if(!l||m===0||u<=0)return i;var d=function(_){var w=_.props,g=w.style,y=g===void 0?{}:g,b=w.className,O=R.cloneElement(_,or(or({},c),{},{style:or(or({},y),f),className:b}));return O};return m===1?d(R.Children.only(i)):L.createElement("div",null,R.Children.map(i,function(v){return d(v)}))}}]),n})(R.PureComponent);yr.displayName="Animate";yr.defaultProps={begin:0,duration:1e3,from:"",to:"",attributeName:"",easing:"ease",isActive:!0,canBegin:!0,steps:[],onAnimationEnd:function(){},onAnimationStart:function(){}};yr.propTypes={from:We.oneOfType([We.object,We.string]),to:We.oneOfType([We.object,We.string]),attributeName:We.string,duration:We.number,begin:We.number,easing:We.oneOfType([We.string,We.func]),steps:We.arrayOf(We.shape({duration:We.number.isRequired,style:We.object.isRequired,easing:We.oneOfType([We.oneOf(["ease","ease-in","ease-out","ease-in-out","linear"]),We.func]),properties:We.arrayOf("string"),onAnimationEnd:We.func})),children:We.oneOfType([We.node,We.func]),isActive:We.bool,canBegin:We.bool,onAnimationEnd:We.func,shouldReAnimate:We.bool,onAnimationStart:We.func,onAnimationReStart:We.func};function ql(e){"@babel/helpers - typeof";return ql=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ql(e)}function C1(){return C1=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0?1:-1,c=r>=0?1:-1,m=a>=0&&r>=0||a<0&&r<0?1:0,f;if(u>0&&i instanceof Array){for(var d=[0,0,0,0],v=0,_=4;v<_;v++)d[v]=i[v]>u?u:i[v];f="M".concat(t,",").concat(n+l*d[0]),d[0]>0&&(f+="A ".concat(d[0],",").concat(d[0],",0,0,").concat(m,",").concat(t+c*d[0],",").concat(n)),f+="L ".concat(t+r-c*d[1],",").concat(n),d[1]>0&&(f+="A ".concat(d[1],",").concat(d[1],",0,0,").concat(m,`, + `).concat(t+r,",").concat(n+l*d[1])),f+="L ".concat(t+r,",").concat(n+a-l*d[2]),d[2]>0&&(f+="A ".concat(d[2],",").concat(d[2],",0,0,").concat(m,`, + `).concat(t+r-c*d[2],",").concat(n+a)),f+="L ".concat(t+c*d[3],",").concat(n+a),d[3]>0&&(f+="A ".concat(d[3],",").concat(d[3],",0,0,").concat(m,`, + `).concat(t,",").concat(n+a-l*d[3])),f+="Z"}else if(u>0&&i===+i&&i>0){var w=Math.min(u,i);f="M ".concat(t,",").concat(n+l*w,` + A `).concat(w,",").concat(w,",0,0,").concat(m,",").concat(t+c*w,",").concat(n,` + L `).concat(t+r-c*w,",").concat(n,` + A `).concat(w,",").concat(w,",0,0,").concat(m,",").concat(t+r,",").concat(n+l*w,` + L `).concat(t+r,",").concat(n+a-l*w,` + A `).concat(w,",").concat(w,",0,0,").concat(m,",").concat(t+r-c*w,",").concat(n+a,` + L `).concat(t+c*w,",").concat(n+a,` + A `).concat(w,",").concat(w,",0,0,").concat(m,",").concat(t,",").concat(n+a-l*w," Z")}else f="M ".concat(t,",").concat(n," h ").concat(r," v ").concat(a," h ").concat(-r," Z");return f},tK=function(t,n){if(!t||!n)return!1;var r=t.x,a=t.y,i=n.x,u=n.y,l=n.width,c=n.height;if(Math.abs(l)>0&&Math.abs(c)>0){var m=Math.min(i,i+l),f=Math.max(i,i+l),d=Math.min(u,u+c),v=Math.max(u,u+c);return r>=m&&r<=f&&a>=d&&a<=v}return!1},nK={x:0,y:0,width:0,height:0,radius:0,isAnimationActive:!1,isUpdateAnimationActive:!1,animationBegin:0,animationDuration:1500,animationEasing:"ease"},U2=function(t){var n=yb(yb({},nK),t),r=R.useRef(),a=R.useState(-1),i=VV(a,2),u=i[0],l=i[1];R.useEffect(function(){if(r.current&&r.current.getTotalLength)try{var k=r.current.getTotalLength();k&&l(k)}catch{}},[]);var c=n.x,m=n.y,f=n.width,d=n.height,v=n.radius,_=n.className,w=n.animationEasing,g=n.animationDuration,y=n.animationBegin,b=n.isAnimationActive,O=n.isUpdateAnimationActive;if(c!==+c||m!==+m||f!==+f||d!==+d||f===0||d===0)return null;var C=Ie("recharts-rectangle",_);return O?L.createElement(yr,{canBegin:u>0,from:{width:f,height:d,x:c,y:m},to:{width:f,height:d,x:c,y:m},duration:g,animationEasing:w,isActive:O},function(k){var P=k.width,A=k.height,T=k.x,q=k.y;return L.createElement(yr,{canBegin:u>0,from:"0px ".concat(u===-1?1:u,"px"),to:"".concat(u,"px 0px"),attributeName:"strokeDasharray",begin:y,duration:g,isActive:b,easing:w},L.createElement("path",C1({},Te(n,!0),{className:C,d:_b(T,q,P,A,v),ref:r})))}):L.createElement("path",C1({},Te(n,!0),{className:C,d:_b(c,m,f,d,v)}))};function nv(){return nv=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function lK(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var cK=function(t,n,r,a,i,u){return"M".concat(t,",").concat(i,"v").concat(a,"M").concat(u,",").concat(n,"h").concat(r)},pK=function(t){var n=t.x,r=n===void 0?0:n,a=t.y,i=a===void 0?0:a,u=t.top,l=u===void 0?0:u,c=t.left,m=c===void 0?0:c,f=t.width,d=f===void 0?0:f,v=t.height,_=v===void 0?0:v,w=t.className,g=uK(t,rK),y=aK({x:r,y:i,top:l,left:m,width:d,height:_},g);return!ce(r)||!ce(i)||!ce(d)||!ce(_)||!ce(l)||!ce(m)?null:L.createElement("path",rv({},Te(y,!0),{className:Ie("recharts-cross",w),d:cK(r,i,d,_,l,m)}))},O9,xb;function mK(){if(xb)return O9;xb=1;var e=uk(),t=e(Object.getPrototypeOf,Object);return O9=t,O9}var k9,wb;function dK(){if(wb)return k9;wb=1;var e=ha(),t=mK(),n=ya(),r="[object Object]",a=Function.prototype,i=Object.prototype,u=a.toString,l=i.hasOwnProperty,c=u.call(Object);function m(f){if(!n(f)||e(f)!=r)return!1;var d=t(f);if(d===null)return!0;var v=l.call(d,"constructor")&&d.constructor;return typeof v=="function"&&v instanceof v&&u.call(v)==c}return k9=m,k9}var fK=dK();const vK=tt(fK);var C9,bb;function hK(){if(bb)return C9;bb=1;var e=ha(),t=ya(),n="[object Boolean]";function r(a){return a===!0||a===!1||t(a)&&e(a)==n}return C9=r,C9}var yK=hK();const _K=tt(yK);function Ml(e){"@babel/helpers - typeof";return Ml=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ml(e)}function A1(){return A1=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n0,from:{upperWidth:0,lowerWidth:0,height:v,x:c,y:m},to:{upperWidth:f,lowerWidth:d,height:v,x:c,y:m},duration:g,animationEasing:w,isActive:b},function(C){var k=C.upperWidth,P=C.lowerWidth,A=C.height,T=C.x,q=C.y;return L.createElement(yr,{canBegin:u>0,from:"0px ".concat(u===-1?1:u,"px"),to:"".concat(u,"px 0px"),attributeName:"strokeDasharray",begin:y,duration:g,easing:w},L.createElement("path",A1({},Te(n,!0),{className:O,d:kb(T,q,k,P,A),ref:r})))}):L.createElement("g",null,L.createElement("path",A1({},Te(n,!0),{className:O,d:kb(c,m,f,d,v)})))},EK=["option","shapeType","propTransformer","activeClassName","isActive"];function Il(e){"@babel/helpers - typeof";return Il=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Il(e)}function RK(e,t){if(e==null)return{};var n=TK(e,t),r,a;if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function TK(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function Cb(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function E1(e){for(var t=1;t0&&r.handleDrag(a.changedTouches[0])}),Rn(r,"handleDragEnd",function(){r.setState({isTravellerMoving:!1,isSlideMoving:!1},function(){var a=r.props,i=a.endIndex,u=a.onDragEnd,l=a.startIndex;u==null||u({endIndex:i,startIndex:l})}),r.detachDragEndListener()}),Rn(r,"handleLeaveWrapper",function(){(r.state.isTravellerMoving||r.state.isSlideMoving)&&(r.leaveTimer=window.setTimeout(r.handleDragEnd,r.props.leaveTimeOut))}),Rn(r,"handleEnterSlideOrTraveller",function(){r.setState({isTextActive:!0})}),Rn(r,"handleLeaveSlideOrTraveller",function(){r.setState({isTextActive:!1})}),Rn(r,"handleSlideDragStart",function(a){var i=Db(a)?a.changedTouches[0]:a;r.setState({isTravellerMoving:!1,isSlideMoving:!0,slideMoveStartX:i.pageX}),r.attachDragEndListener()}),r.travellerDragStartHandlers={startX:r.handleTravellerDragStart.bind(r,"startX"),endX:r.handleTravellerDragStart.bind(r,"endX")},r.state={},r}return aX(t,e),eX(t,[{key:"componentWillUnmount",value:function(){this.leaveTimer&&(clearTimeout(this.leaveTimer),this.leaveTimer=null),this.detachDragEndListener()}},{key:"getIndex",value:function(r){var a=r.startX,i=r.endX,u=this.state.scaleValues,l=this.props,c=l.gap,m=l.data,f=m.length-1,d=Math.min(a,i),v=Math.max(a,i),_=t.getIndexInRange(u,d),w=t.getIndexInRange(u,v);return{startIndex:_-_%c,endIndex:w===f?f:w-w%c}}},{key:"getTextOfTick",value:function(r){var a=this.props,i=a.data,u=a.tickFormatter,l=a.dataKey,c=Tt(i[r],l,r);return Ne(u)?u(c,r):c}},{key:"attachDragEndListener",value:function(){window.addEventListener("mouseup",this.handleDragEnd,!0),window.addEventListener("touchend",this.handleDragEnd,!0),window.addEventListener("mousemove",this.handleDrag,!0)}},{key:"detachDragEndListener",value:function(){window.removeEventListener("mouseup",this.handleDragEnd,!0),window.removeEventListener("touchend",this.handleDragEnd,!0),window.removeEventListener("mousemove",this.handleDrag,!0)}},{key:"handleSlideDrag",value:function(r){var a=this.state,i=a.slideMoveStartX,u=a.startX,l=a.endX,c=this.props,m=c.x,f=c.width,d=c.travellerWidth,v=c.startIndex,_=c.endIndex,w=c.onChange,g=r.pageX-i;g>0?g=Math.min(g,m+f-d-l,m+f-d-u):g<0&&(g=Math.max(g,m-u,m-l));var y=this.getIndex({startX:u+g,endX:l+g});(y.startIndex!==v||y.endIndex!==_)&&w&&w(y),this.setState({startX:u+g,endX:l+g,slideMoveStartX:r.pageX})}},{key:"handleTravellerDragStart",value:function(r,a){var i=Db(a)?a.changedTouches[0]:a;this.setState({isSlideMoving:!1,isTravellerMoving:!0,movingTravellerId:r,brushMoveStartX:i.pageX}),this.attachDragEndListener()}},{key:"handleTravellerMove",value:function(r){var a=this.state,i=a.brushMoveStartX,u=a.movingTravellerId,l=a.endX,c=a.startX,m=this.state[u],f=this.props,d=f.x,v=f.width,_=f.travellerWidth,w=f.onChange,g=f.gap,y=f.data,b={startX:this.state.startX,endX:this.state.endX},O=r.pageX-i;O>0?O=Math.min(O,d+v-_-m):O<0&&(O=Math.max(O,d-m)),b[u]=m+O;var C=this.getIndex(b),k=C.startIndex,P=C.endIndex,A=function(){var q=y.length-1;return u==="startX"&&(l>c?k%g===0:P%g===0)||lc?P%g===0:k%g===0)||l>c&&P===q};this.setState(Rn(Rn({},u,m+O),"brushMoveStartX",r.pageX),function(){w&&A()&&w(C)})}},{key:"handleTravellerMoveKeyboard",value:function(r,a){var i=this,u=this.state,l=u.scaleValues,c=u.startX,m=u.endX,f=this.state[a],d=l.indexOf(f);if(d!==-1){var v=d+r;if(!(v===-1||v>=l.length)){var _=l[v];a==="startX"&&_>=m||a==="endX"&&_<=c||this.setState(Rn({},a,_),function(){i.props.onChange(i.getIndex({startX:i.state.startX,endX:i.state.endX}))})}}}},{key:"renderBackground",value:function(){var r=this.props,a=r.x,i=r.y,u=r.width,l=r.height,c=r.fill,m=r.stroke;return L.createElement("rect",{stroke:m,fill:c,x:a,y:i,width:u,height:l})}},{key:"renderPanorama",value:function(){var r=this.props,a=r.x,i=r.y,u=r.width,l=r.height,c=r.data,m=r.children,f=r.padding,d=R.Children.only(m);return d?L.cloneElement(d,{x:a,y:i,width:u,height:l,margin:f,compact:!0,data:c}):null}},{key:"renderTravellerLayer",value:function(r,a){var i,u,l=this,c=this.props,m=c.y,f=c.travellerWidth,d=c.height,v=c.traveller,_=c.ariaLabel,w=c.data,g=c.startIndex,y=c.endIndex,b=Math.max(r,this.props.x),O=N9(N9({},Te(this.props,!1)),{},{x:b,y:m,width:f,height:d}),C=_||"Min value: ".concat((i=w[g])===null||i===void 0?void 0:i.name,", Max value: ").concat((u=w[y])===null||u===void 0?void 0:u.name);return L.createElement(Be,{tabIndex:0,role:"slider","aria-label":C,"aria-valuenow":r,className:"recharts-brush-traveller",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.travellerDragStartHandlers[a],onTouchStart:this.travellerDragStartHandlers[a],onKeyDown:function(P){["ArrowLeft","ArrowRight"].includes(P.key)&&(P.preventDefault(),P.stopPropagation(),l.handleTravellerMoveKeyboard(P.key==="ArrowRight"?1:-1,a))},onFocus:function(){l.setState({isTravellerFocused:!0})},onBlur:function(){l.setState({isTravellerFocused:!1})},style:{cursor:"col-resize"}},t.renderTraveller(v,O))}},{key:"renderSlide",value:function(r,a){var i=this.props,u=i.y,l=i.height,c=i.stroke,m=i.travellerWidth,f=Math.min(r,a)+m,d=Math.max(Math.abs(a-r)-m,0);return L.createElement("rect",{className:"recharts-brush-slide",onMouseEnter:this.handleEnterSlideOrTraveller,onMouseLeave:this.handleLeaveSlideOrTraveller,onMouseDown:this.handleSlideDragStart,onTouchStart:this.handleSlideDragStart,style:{cursor:"move"},stroke:"none",fill:c,fillOpacity:.2,x:f,y:u,width:d,height:l})}},{key:"renderText",value:function(){var r=this.props,a=r.startIndex,i=r.endIndex,u=r.y,l=r.height,c=r.travellerWidth,m=r.stroke,f=this.state,d=f.startX,v=f.endX,_=5,w={pointerEvents:"none",fill:m};return L.createElement(Be,{className:"recharts-brush-texts"},L.createElement(o1,T1({textAnchor:"end",verticalAnchor:"middle",x:Math.min(d,v)-_,y:u+l/2},w),this.getTextOfTick(a)),L.createElement(o1,T1({textAnchor:"start",verticalAnchor:"middle",x:Math.max(d,v)+c+_,y:u+l/2},w),this.getTextOfTick(i)))}},{key:"render",value:function(){var r=this.props,a=r.data,i=r.className,u=r.children,l=r.x,c=r.y,m=r.width,f=r.height,d=r.alwaysShowText,v=this.state,_=v.startX,w=v.endX,g=v.isTextActive,y=v.isSlideMoving,b=v.isTravellerMoving,O=v.isTravellerFocused;if(!a||!a.length||!ce(l)||!ce(c)||!ce(m)||!ce(f)||m<=0||f<=0)return null;var C=Ie("recharts-brush",i),k=L.Children.count(u)===1,P=ZK("userSelect","none");return L.createElement(Be,{className:C,onMouseLeave:this.handleLeaveWrapper,onTouchMove:this.handleTouchMove,style:P},this.renderBackground(),k&&this.renderPanorama(),this.renderSlide(_,w),this.renderTravellerLayer(_,"startX"),this.renderTravellerLayer(w,"endX"),(g||y||b||O||d)&&this.renderText())}}],[{key:"renderDefaultTraveller",value:function(r){var a=r.x,i=r.y,u=r.width,l=r.height,c=r.stroke,m=Math.floor(i+l/2)-1;return L.createElement(L.Fragment,null,L.createElement("rect",{x:a,y:i,width:u,height:l,fill:c,stroke:"none"}),L.createElement("line",{x1:a+1,y1:m,x2:a+u-1,y2:m,fill:"none",stroke:"#fff"}),L.createElement("line",{x1:a+1,y1:m+2,x2:a+u-1,y2:m+2,fill:"none",stroke:"#fff"}))}},{key:"renderTraveller",value:function(r,a){var i;return L.isValidElement(r)?i=L.cloneElement(r,a):Ne(r)?i=r(a):i=t.renderDefaultTraveller(a),i}},{key:"getDerivedStateFromProps",value:function(r,a){var i=r.data,u=r.width,l=r.x,c=r.travellerWidth,m=r.updateId,f=r.startIndex,d=r.endIndex;if(i!==a.prevData||m!==a.prevUpdateId)return N9({prevData:i,prevTravellerWidth:c,prevUpdateId:m,prevX:l,prevWidth:u},i&&i.length?iX({data:i,width:u,x:l,travellerWidth:c,startIndex:f,endIndex:d}):{scale:null,scaleValues:null});if(a.scale&&(u!==a.prevWidth||l!==a.prevX||c!==a.prevTravellerWidth)){a.scale.range([l,l+u-c]);var v=a.scale.domain().map(function(_){return a.scale(_)});return{prevData:i,prevTravellerWidth:c,prevUpdateId:m,prevX:l,prevWidth:u,startX:a.scale(r.startIndex),endX:a.scale(r.endIndex),scaleValues:v}}return null}},{key:"getIndexInRange",value:function(r,a){for(var i=r.length,u=0,l=i-1;l-u>1;){var c=Math.floor((u+l)/2);r[c]>a?l=c:u=c}return a>=r[l]?l:u}}])})(R.PureComponent);Rn(gs,"displayName","Brush");Rn(gs,"defaultProps",{height:40,travellerWidth:5,gap:1,fill:"#fff",stroke:"#666",padding:{top:1,right:1,bottom:1,left:1},leaveTimeOut:1e3,alwaysShowText:!1});var q9,$b;function sX(){if($b)return q9;$b=1;var e=h2();function t(n,r){var a;return e(n,function(i,u,l){return a=r(i,u,l),!a}),!!a}return q9=t,q9}var j9,Lb;function uX(){if(Lb)return j9;Lb=1;var e=tk(),t=so(),n=sX(),r=Pn(),a=_0();function i(u,l,c){var m=r(u)?e:n;return c&&a(u,l,c)&&(l=void 0),m(u,t(l,3))}return j9=i,j9}var lX=uX();const cX=tt(lX);var Dr=function(t,n){var r=t.alwaysShow,a=t.ifOverflow;return r&&(a="extendDomain"),a===n},M9,Hb;function pX(){if(Hb)return M9;Hb=1;var e=gk();function t(n,r,a){r=="__proto__"&&e?e(n,r,{configurable:!0,enumerable:!0,value:a,writable:!0}):n[r]=a}return M9=t,M9}var I9,Gb;function mX(){if(Gb)return I9;Gb=1;var e=pX(),t=yk(),n=so();function r(a,i){var u={};return i=n(i,3),t(a,function(l,c,m){e(u,c,i(l,c,m))}),u}return I9=r,I9}var dX=mX();const fX=tt(dX);var D9,Fb;function vX(){if(Fb)return D9;Fb=1;function e(t,n){for(var r=-1,a=t==null?0:t.length;++r=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function PX(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function OX(e,t){var n=e.x,r=e.y,a=SX(e,gX),i="".concat(n),u=parseInt(i,10),l="".concat(r),c=parseInt(l,10),m="".concat(t.height||a.height),f=parseInt(m,10),d="".concat(t.width||a.width),v=parseInt(d,10);return Vu(Vu(Vu(Vu(Vu({},t),a),u?{x:u}:{}),c?{y:c}:{}),{},{height:f,width:v,name:t.name,radius:t.radius})}function Wb(e){return L.createElement(av,iv({shapeType:"rectangle",propTransformer:OX,activeClassName:"recharts-active-bar"},e))}var kX=function(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;return function(r,a){if(typeof t=="number")return t;var i=ce(r)||NI(r);return i?t(r,a):(i||Qo(),n)}},CX=["value","background"],WC;function xs(e){"@babel/helpers - typeof";return xs=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},xs(e)}function AX(e,t){if(e==null)return{};var n=EX(e,t),r,a;if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function EX(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function q1(){return q1=Object.assign?Object.assign.bind():function(e){for(var t=1;t0&&Math.abs(V)0&&Math.abs(F)0&&(H=Math.min((me||0)-(F[ge-1]||0),H))}),Number.isFinite(H)){var V=H/M,K=g.layout==="vertical"?r.height:r.width;if(g.padding==="gap"&&(T=V*K/2),g.padding==="no-gap"){var J=Ko(t.barCategoryGap,V*K),z=V*K/2;T=z-J-(z-J)/K*J}}}a==="xAxis"?q=[r.left+(C.left||0)+(T||0),r.left+r.width-(C.right||0)-(T||0)]:a==="yAxis"?q=c==="horizontal"?[r.top+r.height-(C.bottom||0),r.top+(C.top||0)]:[r.top+(C.top||0)+(T||0),r.top+r.height-(C.bottom||0)-(T||0)]:q=g.range,P&&(q=[q[1],q[0]]);var Y=Yz(g,i,v),Q=Y.scale,D=Y.realScaleType;Q.domain(b).range(q),Qz(Q);var W=oU(Q,lr(lr({},g),{},{realScaleType:D}));a==="xAxis"?($=y==="top"&&!k||y==="bottom"&&k,j=r.left,B=d[A]-$*g.height):a==="yAxis"&&($=y==="left"&&!k||y==="right"&&k,j=d[A]-$*g.width,B=r.top);var oe=lr(lr(lr({},g),W),{},{realScaleType:D,x:j,y:B,scale:Q,width:a==="xAxis"?r.width:g.width,height:a==="yAxis"?r.height:g.height});return oe.bandSize=x1(oe,W),!g.hide&&a==="xAxis"?d[A]+=($?-1:1)*oe.height:g.hide||(d[A]+=($?-1:1)*oe.width),lr(lr({},_),{},T0({},w,oe))},{})},YC=function(t,n){var r=t.x,a=t.y,i=n.x,u=n.y;return{x:Math.min(r,i),y:Math.min(a,u),width:Math.abs(i-r),height:Math.abs(u-a)}},HX=function(t){var n=t.x1,r=t.y1,a=t.x2,i=t.y2;return YC({x:n,y:r},{x:a,y:i})},QC=(function(){function e(t){DX(this,e),this.scale=t}return $X(e,[{key:"domain",get:function(){return this.scale.domain}},{key:"range",get:function(){return this.scale.range}},{key:"rangeMin",get:function(){return this.range()[0]}},{key:"rangeMax",get:function(){return this.range()[1]}},{key:"bandwidth",get:function(){return this.scale.bandwidth}},{key:"apply",value:function(n){var r=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},a=r.bandAware,i=r.position;if(n!==void 0){if(i)switch(i){case"start":return this.scale(n);case"middle":{var u=this.bandwidth?this.bandwidth()/2:0;return this.scale(n)+u}case"end":{var l=this.bandwidth?this.bandwidth():0;return this.scale(n)+l}default:return this.scale(n)}if(a){var c=this.bandwidth?this.bandwidth()/2:0;return this.scale(n)+c}return this.scale(n)}}},{key:"isInRange",value:function(n){var r=this.range(),a=r[0],i=r[r.length-1];return a<=i?n>=a&&n<=i:n>=i&&n<=a}}],[{key:"create",value:function(n){return new e(n)}}])})();T0(QC,"EPS",1e-4);var W2=function(t){var n=Object.keys(t).reduce(function(r,a){return lr(lr({},r),{},T0({},a,QC.create(t[a])))},{});return lr(lr({},n),{},{apply:function(a){var i=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},u=i.bandAware,l=i.position;return fX(a,function(c,m){return n[m].apply(c,{bandAware:u,position:l})})},isInRange:function(a){return UC(a,function(i,u){return n[u].isInRange(i)})}})};function GX(e){return(e%180+180)%180}var FX=function(t){var n=t.width,r=t.height,a=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,i=GX(a),u=i*Math.PI/180,l=Math.atan(r/n),c=u>l&&u-1?c[m?i[f]:f]:void 0}}return H9=r,H9}var G9,Zb;function zX(){if(Zb)return G9;Zb=1;var e=GC();function t(n){var r=e(n),a=r%1;return r===r?a?r-a:r:0}return G9=t,G9}var F9,Jb;function UX(){if(Jb)return F9;Jb=1;var e=mk(),t=so(),n=zX(),r=Math.max;function a(i,u,l){var c=i==null?0:i.length;if(!c)return-1;var m=l==null?0:n(l);return m<0&&(m=r(c+m,0)),e(i,t(u,3),m)}return F9=a,F9}var B9,eS;function WX(){if(eS)return B9;eS=1;var e=BX(),t=UX(),n=e(t);return B9=n,B9}var VX=WX();const KX=tt(VX);var XX=CO();const YX=tt(XX);var QX=YX(function(e){return{x:e.left,y:e.top,width:e.width,height:e.height}},function(e){return["l",e.left,"t",e.top,"w",e.width,"h",e.height].join("")}),V2=R.createContext(void 0),K2=R.createContext(void 0),ZC=R.createContext(void 0),JC=R.createContext({}),eA=R.createContext(void 0),tA=R.createContext(0),nA=R.createContext(0),tS=function(t){var n=t.state,r=n.xAxisMap,a=n.yAxisMap,i=n.offset,u=t.clipPathId,l=t.children,c=t.width,m=t.height,f=QX(i);return L.createElement(V2.Provider,{value:r},L.createElement(K2.Provider,{value:a},L.createElement(JC.Provider,{value:i},L.createElement(ZC.Provider,{value:f},L.createElement(eA.Provider,{value:u},L.createElement(tA.Provider,{value:m},L.createElement(nA.Provider,{value:c},l)))))))},ZX=function(){return R.useContext(eA)},rA=function(t){var n=R.useContext(V2);n==null&&Qo();var r=n[t];return r==null&&Qo(),r},JX=function(){var t=R.useContext(V2);return za(t)},eY=function(){var t=R.useContext(K2),n=KX(t,function(r){return UC(r.domain,Number.isFinite)});return n||za(t)},aA=function(t){var n=R.useContext(K2);n==null&&Qo();var r=n[t];return r==null&&Qo(),r},tY=function(){var t=R.useContext(ZC);return t},nY=function(){return R.useContext(JC)},X2=function(){return R.useContext(nA)},Y2=function(){return R.useContext(tA)};function ws(e){"@babel/helpers - typeof";return ws=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},ws(e)}function rY(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function aY(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);ne*a)return!1;var i=n();return e*(t-e*i/2-r)>=0&&e*(t+e*i/2-a)<=0}function LY(e,t){return pA(e,t+1)}function HY(e,t,n,r,a){for(var i=(r||[]).slice(),u=t.start,l=t.end,c=0,m=1,f=u,d=function(){var w=r==null?void 0:r[c];if(w===void 0)return{v:pA(r,m)};var g=c,y,b=function(){return y===void 0&&(y=n(w,g)),y},O=w.coordinate,C=c===0||$1(e,O,b,f,l);C||(c=0,f=u,m+=1),C&&(f=O+e*(b()/2+a),c+=m)},v;m<=i.length;)if(v=d(),v)return v.v;return[]}function Gl(e){"@babel/helpers - typeof";return Gl=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Gl(e)}function lS(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function rn(e){for(var t=1;t0?_.coordinate-y*e:_.coordinate})}else i[v]=_=rn(rn({},_),{},{tickCoord:_.coordinate});var b=$1(e,_.tickCoord,g,l,c);b&&(c=_.tickCoord-e*(g()/2+a),i[v]=rn(rn({},_),{},{isShow:!0}))},f=u-1;f>=0;f--)m(f);return i}function UY(e,t,n,r,a,i){var u=(r||[]).slice(),l=u.length,c=t.start,m=t.end;if(i){var f=r[l-1],d=n(f,l-1),v=e*(f.coordinate+e*d/2-m);u[l-1]=f=rn(rn({},f),{},{tickCoord:v>0?f.coordinate-v*e:f.coordinate});var _=$1(e,f.tickCoord,function(){return d},c,m);_&&(m=f.tickCoord-e*(d/2+a),u[l-1]=rn(rn({},f),{},{isShow:!0}))}for(var w=i?l-1:l,g=function(O){var C=u[O],k,P=function(){return k===void 0&&(k=n(C,O)),k};if(O===0){var A=e*(C.coordinate-e*P()/2-c);u[O]=C=rn(rn({},C),{},{tickCoord:A<0?C.coordinate-A*e:C.coordinate})}else u[O]=C=rn(rn({},C),{},{tickCoord:C.coordinate});var T=$1(e,C.tickCoord,P,c,m);T&&(c=C.tickCoord+e*(P()/2+a),u[O]=rn(rn({},C),{},{isShow:!0}))},y=0;y=2?mr(a[1].coordinate-a[0].coordinate):1,b=$Y(i,y,_);return c==="equidistantPreserveStart"?HY(y,b,g,a,u):(c==="preserveStart"||c==="preserveStartEnd"?v=UY(y,b,g,a,u,c==="preserveStartEnd"):v=zY(y,b,g,a,u),v.filter(function(O){return O.isShow}))}var WY=["viewBox"],VY=["viewBox"],KY=["ticks"];function Ps(e){"@babel/helpers - typeof";return Ps=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Ps(e)}function Gi(){return Gi=Object.assign?Object.assign.bind():function(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function XY(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function YY(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function pS(e,t){for(var n=0;n0?c(this.props):c(_)),u<=0||l<=0||!w||!w.length?null:L.createElement(Be,{className:Ie("recharts-cartesian-axis",m),ref:function(y){r.layerReference=y}},i&&this.renderAxisLine(),this.renderTicks(w,this.state.fontSize,this.state.letterSpacing),an.renderCallByParent(this.props))}}],[{key:"renderTickItem",value:function(r,a,i){var u,l=Ie(a.className,"recharts-cartesian-axis-tick-value");return L.isValidElement(r)?u=L.cloneElement(r,At(At({},a),{},{className:l})):Ne(r)?u=r(At(At({},a),{},{className:l})):u=L.createElement(o1,Gi({},a,{className:"recharts-cartesian-axis-tick-value"}),i),u}}])})(R.Component);eh(Ks,"displayName","CartesianAxis");eh(Ks,"defaultProps",{x:0,y:0,width:0,height:0,viewBox:{x:0,y:0,width:0,height:0},orientation:"bottom",ticks:[],stroke:"#666",tickLine:!0,axisLine:!0,tick:!0,mirror:!1,minTickGap:5,tickSize:6,tickMargin:2,interval:"preserveEnd"});var rQ=["x1","y1","x2","y2","key"],aQ=["offset"];function Zo(e){"@babel/helpers - typeof";return Zo=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Zo(e)}function mS(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(a){return Object.getOwnPropertyDescriptor(e,a).enumerable})),n.push.apply(n,r)}return n}function on(e){for(var t=1;t=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function uQ(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}var lQ=function(t){var n=t.fill;if(!n||n==="none")return null;var r=t.fillOpacity,a=t.x,i=t.y,u=t.width,l=t.height,c=t.ry;return L.createElement("rect",{x:a,y:i,ry:c,width:u,height:l,stroke:"none",fill:n,fillOpacity:r,className:"recharts-cartesian-grid-bg"})};function fA(e,t){var n;if(L.isValidElement(e))n=L.cloneElement(e,t);else if(Ne(e))n=e(t);else{var r=t.x1,a=t.y1,i=t.x2,u=t.y2,l=t.key,c=dS(t,rQ),m=Te(c,!1);m.offset;var f=dS(m,aQ);n=L.createElement("line",qo({},f,{x1:r,y1:a,x2:i,y2:u,fill:"none",key:l}))}return n}function cQ(e){var t=e.x,n=e.width,r=e.horizontal,a=r===void 0?!0:r,i=e.horizontalPoints;if(!a||!i||!i.length)return null;var u=i.map(function(l,c){var m=on(on({},e),{},{x1:t,y1:l,x2:t+n,y2:l,key:"line-".concat(c),index:c});return fA(a,m)});return L.createElement("g",{className:"recharts-cartesian-grid-horizontal"},u)}function pQ(e){var t=e.y,n=e.height,r=e.vertical,a=r===void 0?!0:r,i=e.verticalPoints;if(!a||!i||!i.length)return null;var u=i.map(function(l,c){var m=on(on({},e),{},{x1:l,y1:t,x2:l,y2:t+n,key:"line-".concat(c),index:c});return fA(a,m)});return L.createElement("g",{className:"recharts-cartesian-grid-vertical"},u)}function mQ(e){var t=e.horizontalFill,n=e.fillOpacity,r=e.x,a=e.y,i=e.width,u=e.height,l=e.horizontalPoints,c=e.horizontal,m=c===void 0?!0:c;if(!m||!t||!t.length)return null;var f=l.map(function(v){return Math.round(v+a-a)}).sort(function(v,_){return v-_});a!==f[0]&&f.unshift(0);var d=f.map(function(v,_){var w=!f[_+1],g=w?a+u-v:f[_+1]-v;if(g<=0)return null;var y=_%t.length;return L.createElement("rect",{key:"react-".concat(_),y:v,x:r,height:g,width:i,stroke:"none",fill:t[y],fillOpacity:n,className:"recharts-cartesian-grid-bg"})});return L.createElement("g",{className:"recharts-cartesian-gridstripes-horizontal"},d)}function dQ(e){var t=e.vertical,n=t===void 0?!0:t,r=e.verticalFill,a=e.fillOpacity,i=e.x,u=e.y,l=e.width,c=e.height,m=e.verticalPoints;if(!n||!r||!r.length)return null;var f=m.map(function(v){return Math.round(v+i-i)}).sort(function(v,_){return v-_});i!==f[0]&&f.unshift(0);var d=f.map(function(v,_){var w=!f[_+1],g=w?i+l-v:f[_+1]-v;if(g<=0)return null;var y=_%r.length;return L.createElement("rect",{key:"react-".concat(_),x:v,y:u,width:g,height:c,stroke:"none",fill:r[y],fillOpacity:a,className:"recharts-cartesian-grid-bg"})});return L.createElement("g",{className:"recharts-cartesian-gridstripes-vertical"},d)}var fQ=function(t,n){var r=t.xAxis,a=t.width,i=t.height,u=t.offset;return AC(J2(on(on(on({},Ks.defaultProps),r),{},{ticks:aa(r,!0),viewBox:{x:0,y:0,width:a,height:i}})),u.left,u.left+u.width,n)},vQ=function(t,n){var r=t.yAxis,a=t.width,i=t.height,u=t.offset;return AC(J2(on(on(on({},Ks.defaultProps),r),{},{ticks:aa(r,!0),viewBox:{x:0,y:0,width:a,height:i}})),u.top,u.top+u.height,n)},Di={horizontal:!0,vertical:!0,stroke:"#ccc",fill:"none",verticalFill:[],horizontalFill:[]};function dr(e){var t,n,r,a,i,u,l=X2(),c=Y2(),m=nY(),f=on(on({},e),{},{stroke:(t=e.stroke)!==null&&t!==void 0?t:Di.stroke,fill:(n=e.fill)!==null&&n!==void 0?n:Di.fill,horizontal:(r=e.horizontal)!==null&&r!==void 0?r:Di.horizontal,horizontalFill:(a=e.horizontalFill)!==null&&a!==void 0?a:Di.horizontalFill,vertical:(i=e.vertical)!==null&&i!==void 0?i:Di.vertical,verticalFill:(u=e.verticalFill)!==null&&u!==void 0?u:Di.verticalFill,x:ce(e.x)?e.x:m.left,y:ce(e.y)?e.y:m.top,width:ce(e.width)?e.width:m.width,height:ce(e.height)?e.height:m.height}),d=f.x,v=f.y,_=f.width,w=f.height,g=f.syncWithTicks,y=f.horizontalValues,b=f.verticalValues,O=JX(),C=eY();if(!ce(_)||_<=0||!ce(w)||w<=0||!ce(d)||d!==+d||!ce(v)||v!==+v)return null;var k=f.verticalCoordinatesGenerator||fQ,P=f.horizontalCoordinatesGenerator||vQ,A=f.horizontalPoints,T=f.verticalPoints;if((!A||!A.length)&&Ne(P)){var q=y&&y.length,j=P({yAxis:C?on(on({},C),{},{ticks:q?y:C.ticks}):void 0,width:l,height:c,offset:m},q?!0:g);ua(Array.isArray(j),"horizontalCoordinatesGenerator should return Array but instead it returned [".concat(Zo(j),"]")),Array.isArray(j)&&(A=j)}if((!T||!T.length)&&Ne(k)){var B=b&&b.length,$=k({xAxis:O?on(on({},O),{},{ticks:B?b:O.ticks}):void 0,width:l,height:c,offset:m},B?!0:g);ua(Array.isArray($),"verticalCoordinatesGenerator should return Array but instead it returned [".concat(Zo($),"]")),Array.isArray($)&&(T=$)}return L.createElement("g",{className:"recharts-cartesian-grid"},L.createElement(lQ,{fill:f.fill,fillOpacity:f.fillOpacity,x:f.x,y:f.y,width:f.width,height:f.height,ry:f.ry}),L.createElement(cQ,qo({},f,{offset:m,horizontalPoints:A,xAxis:O,yAxis:C})),L.createElement(pQ,qo({},f,{offset:m,verticalPoints:T,xAxis:O,yAxis:C})),L.createElement(mQ,qo({},f,{horizontalPoints:A})),L.createElement(dQ,qo({},f,{verticalPoints:T})))}dr.displayName="CartesianGrid";var hQ=["type","layout","connectNulls","ref"],yQ=["key"];function Os(e){"@babel/helpers - typeof";return Os=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Os(e)}function fS(e,t){if(e==null)return{};var n=_Q(e,t),r,a;if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);for(a=0;a=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function _Q(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function tl(){return tl=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);nd){_=[].concat($i(c.slice(0,w)),[d-g]);break}var y=_.length%2===0?[0,v]:[v];return[].concat($i(t.repeat(c,f)),$i(_),y).map(function(b){return"".concat(b,"px")}).join(", ")}),cr(n,"id",ni("recharts-line-")),cr(n,"pathRef",function(u){n.mainCurve=u}),cr(n,"handleAnimationEnd",function(){n.setState({isAnimationFinished:!0}),n.props.onAnimationEnd&&n.props.onAnimationEnd()}),cr(n,"handleAnimationStart",function(){n.setState({isAnimationFinished:!1}),n.props.onAnimationStart&&n.props.onAnimationStart()}),n}return AQ(t,e),PQ(t,[{key:"componentDidMount",value:function(){if(this.props.isAnimationActive){var r=this.getTotalLength();this.setState({totalLength:r})}}},{key:"componentDidUpdate",value:function(){if(this.props.isAnimationActive){var r=this.getTotalLength();r!==this.state.totalLength&&this.setState({totalLength:r})}}},{key:"getTotalLength",value:function(){var r=this.mainCurve;try{return r&&r.getTotalLength&&r.getTotalLength()||0}catch{return 0}}},{key:"renderErrorBar",value:function(r,a){if(this.props.isAnimationActive&&!this.state.isAnimationFinished)return null;var i=this.props,u=i.points,l=i.xAxis,c=i.yAxis,m=i.layout,f=i.children,d=Sn(f,Vs);if(!d)return null;var v=function(g,y){return{x:g.x,y:g.y,value:g.value,errorVal:Tt(g.payload,y)}},_={clipPath:r?"url(#clipPath-".concat(a,")"):null};return L.createElement(Be,_,d.map(function(w){return L.cloneElement(w,{key:"bar-".concat(w.props.dataKey),data:u,xAxis:l,yAxis:c,layout:m,dataPointFormatter:v})}))}},{key:"renderDots",value:function(r,a,i){var u=this.props.isAnimationActive;if(u&&!this.state.isAnimationFinished)return null;var l=this.props,c=l.dot,m=l.points,f=l.dataKey,d=Te(this.props,!1),v=Te(c,!0),_=m.map(function(g,y){var b=En(En(En({key:"dot-".concat(y),r:3},d),v),{},{index:y,cx:g.x,cy:g.y,value:g.value,dataKey:f,payload:g.payload,points:m});return t.renderDotItem(c,b)}),w={clipPath:r?"url(#clipPath-".concat(a?"":"dots-").concat(i,")"):null};return L.createElement(Be,tl({className:"recharts-line-dots",key:"dots"},w),_)}},{key:"renderCurveStatically",value:function(r,a,i,u){var l=this.props,c=l.type,m=l.layout,f=l.connectNulls;l.ref;var d=fS(l,hQ),v=En(En(En({},Te(d,!0)),{},{fill:"none",className:"recharts-line-curve",clipPath:a?"url(#clipPath-".concat(i,")"):null,points:r},u),{},{type:c,layout:m,connectNulls:f});return L.createElement(Bo,tl({},v,{pathRef:this.pathRef}))}},{key:"renderCurveWithAnimation",value:function(r,a){var i=this,u=this.props,l=u.points,c=u.strokeDasharray,m=u.isAnimationActive,f=u.animationBegin,d=u.animationDuration,v=u.animationEasing,_=u.animationId,w=u.animateNewValues,g=u.width,y=u.height,b=this.state,O=b.prevPoints,C=b.totalLength;return L.createElement(yr,{begin:f,duration:d,isActive:m,easing:v,from:{t:0},to:{t:1},key:"line-".concat(_),onAnimationEnd:this.handleAnimationEnd,onAnimationStart:this.handleAnimationStart},function(k){var P=k.t;if(O){var A=O.length/l.length,T=l.map(function(M,H){var F=Math.floor(H*A);if(O[F]){var V=O[F],K=wt(V.x,M.x),J=wt(V.y,M.y);return En(En({},M),{},{x:K(P),y:J(P)})}if(w){var z=wt(g*2,M.x),Y=wt(y/2,M.y);return En(En({},M),{},{x:z(P),y:Y(P)})}return En(En({},M),{},{x:M.x,y:M.y})});return i.renderCurveStatically(T,r,a)}var q=wt(0,C),j=q(P),B;if(c){var $="".concat(c).split(/[,\s]+/gim).map(function(M){return parseFloat(M)});B=i.getStrokeDasharray(j,C,$)}else B=i.generateSimpleStrokeDasharray(C,j);return i.renderCurveStatically(l,r,a,{strokeDasharray:B})})}},{key:"renderCurve",value:function(r,a){var i=this.props,u=i.points,l=i.isAnimationActive,c=this.state,m=c.prevPoints,f=c.totalLength;return l&&u&&u.length&&(!m&&f>0||!Xo(m,u))?this.renderCurveWithAnimation(r,a):this.renderCurveStatically(u,r,a)}},{key:"render",value:function(){var r,a=this.props,i=a.hide,u=a.dot,l=a.points,c=a.className,m=a.xAxis,f=a.yAxis,d=a.top,v=a.left,_=a.width,w=a.height,g=a.isAnimationActive,y=a.id;if(i||!l||!l.length)return null;var b=this.state.isAnimationFinished,O=l.length===1,C=Ie("recharts-line",c),k=m&&m.allowDataOverflow,P=f&&f.allowDataOverflow,A=k||P,T=Re(y)?this.id:y,q=(r=Te(u,!1))!==null&&r!==void 0?r:{r:3,strokeWidth:2},j=q.r,B=j===void 0?3:j,$=q.strokeWidth,M=$===void 0?2:$,H=NO(u)?u:{},F=H.clipDot,V=F===void 0?!0:F,K=B*2+M;return L.createElement(Be,{className:C},k||P?L.createElement("defs",null,L.createElement("clipPath",{id:"clipPath-".concat(T)},L.createElement("rect",{x:k?v:v-_/2,y:P?d:d-w/2,width:k?_:_*2,height:P?w:w*2})),!V&&L.createElement("clipPath",{id:"clipPath-dots-".concat(T)},L.createElement("rect",{x:v-K/2,y:d-K/2,width:_+K,height:w+K}))):null,!O&&this.renderCurve(A,T),this.renderErrorBar(A,T),(O||u)&&this.renderDots(A,V,T),(!g||b)&&Ir.renderCallByParent(this.props,l))}}],[{key:"getDerivedStateFromProps",value:function(r,a){return r.animationId!==a.prevAnimationId?{prevAnimationId:r.animationId,curPoints:r.points,prevPoints:a.curPoints}:r.points!==a.curPoints?{curPoints:r.points}:null}},{key:"repeat",value:function(r,a){for(var i=r.length%2!==0?[].concat($i(r),[0]):r,u=[],l=0;l=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function NQ(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function jo(){return jo=Object.assign?Object.assign.bind():function(e){for(var t=1;t0||!Xo(f,u)||!Xo(d,l))?this.renderAreaWithAnimation(r,a):this.renderAreaStatically(u,l,r,a)}},{key:"render",value:function(){var r,a=this.props,i=a.hide,u=a.dot,l=a.points,c=a.className,m=a.top,f=a.left,d=a.xAxis,v=a.yAxis,_=a.width,w=a.height,g=a.isAnimationActive,y=a.id;if(i||!l||!l.length)return null;var b=this.state.isAnimationFinished,O=l.length===1,C=Ie("recharts-area",c),k=d&&d.allowDataOverflow,P=v&&v.allowDataOverflow,A=k||P,T=Re(y)?this.id:y,q=(r=Te(u,!1))!==null&&r!==void 0?r:{r:3,strokeWidth:2},j=q.r,B=j===void 0?3:j,$=q.strokeWidth,M=$===void 0?2:$,H=NO(u)?u:{},F=H.clipDot,V=F===void 0?!0:F,K=B*2+M;return L.createElement(Be,{className:C},k||P?L.createElement("defs",null,L.createElement("clipPath",{id:"clipPath-".concat(T)},L.createElement("rect",{x:k?f:f-_/2,y:P?m:m-w/2,width:k?_:_*2,height:P?w:w*2})),!V&&L.createElement("clipPath",{id:"clipPath-dots-".concat(T)},L.createElement("rect",{x:f-K/2,y:m-K/2,width:_+K,height:w+K}))):null,O?null:this.renderArea(A,T),(u||O)&&this.renderDots(A,V,T),(!g||b)&&Ir.renderCallByParent(this.props,l))}}],[{key:"getDerivedStateFromProps",value:function(r,a){return r.animationId!==a.prevAnimationId?{prevAnimationId:r.animationId,curPoints:r.points,curBaseLine:r.baseLine,prevPoints:a.curPoints,prevBaseLine:a.curBaseLine}:r.points!==a.curPoints||r.baseLine!==a.curBaseLine?{curPoints:r.points,curBaseLine:r.baseLine}:null}}])})(R.PureComponent);yA=Kt;Nr(Kt,"displayName","Area");Nr(Kt,"defaultProps",{stroke:"#3182bd",fill:"#3182bd",fillOpacity:.6,xAxisId:0,yAxisId:0,legendType:"line",connectNulls:!1,points:[],dot:!1,activeDot:!0,hide:!1,isAnimationActive:!uo.isSsr,animationBegin:0,animationDuration:1500,animationEasing:"ease"});Nr(Kt,"getBaseValue",function(e,t,n,r){var a=e.layout,i=e.baseValue,u=t.props.baseValue,l=u??i;if(ce(l)&&typeof l=="number")return l;var c=a==="horizontal"?r:n,m=c.scale.domain();if(c.type==="number"){var f=Math.max(m[0],m[1]),d=Math.min(m[0],m[1]);return l==="dataMin"?d:l==="dataMax"||f<0?f:Math.max(Math.min(m[0],m[1]),0)}return l==="dataMin"?m[0]:l==="dataMax"?m[1]:m[0]});Nr(Kt,"getComposedData",function(e){var t=e.props,n=e.item,r=e.xAxis,a=e.yAxis,i=e.xAxisTicks,u=e.yAxisTicks,l=e.bandSize,c=e.dataKey,m=e.stackedData,f=e.dataStartIndex,d=e.displayedData,v=e.offset,_=t.layout,w=m&&m.length,g=yA.getBaseValue(t,n,r,a),y=_==="horizontal",b=!1,O=d.map(function(k,P){var A;w?A=m[f+P]:(A=Tt(k,c),Array.isArray(A)?b=!0:A=[g,A]);var T=A[1]==null||w&&Tt(k,c)==null;return y?{x:hs({axis:r,ticks:i,bandSize:l,entry:k,index:P}),y:T?null:a.scale(A[1]),value:A,payload:k}:{x:T?null:r.scale(A[1]),y:hs({axis:a,ticks:u,bandSize:l,entry:k,index:P}),value:A,payload:k}}),C;return w||b?C=O.map(function(k){var P=Array.isArray(k.value)?k.value[0]:null;return y?{x:k.x,y:P!=null&&k.y!=null?a.scale(P):null}:{x:P!=null?r.scale(P):null,y:k.y}}):C=y?a.scale(g):r.scale(g),Ga({points:O,baseLine:C,layout:_,isRange:b},v)});Nr(Kt,"renderDotItem",function(e,t){var n;if(L.isValidElement(e))n=L.cloneElement(e,t);else if(Ne(e))n=e(t);else{var r=Ie("recharts-area-dot",typeof e!="boolean"?e.className:""),a=t.key,i=_A(t,TQ);n=L.createElement(A0,jo({},i,{key:a,className:r}))}return n});function Cs(e){"@babel/helpers - typeof";return Cs=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},Cs(e)}function HQ(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function GQ(e,t){for(var n=0;n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function YQ(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function QQ(e){var t=e.option,n=e.isActive,r=XQ(e,KQ);return typeof t=="string"?R.createElement(av,nl({option:R.createElement(v0,nl({type:t},r)),isActive:n,shapeType:"symbols"},r)):R.createElement(av,nl({option:t,isActive:n,shapeType:"symbols"},r))}function As(e){"@babel/helpers - typeof";return As=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(t){return typeof t}:function(t){return t&&typeof Symbol=="function"&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t},As(e)}function rl(){return rl=Object.assign?Object.assign.bind():function(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,r=new Array(t);n=0)&&Object.prototype.propertyIsEnumerable.call(e,r)&&(n[r]=e[r])}return n}function VZ(e,t){if(e==null)return{};var n={};for(var r in e)if(Object.prototype.hasOwnProperty.call(e,r)){if(t.indexOf(r)>=0)continue;n[r]=e[r]}return n}function KZ(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function XZ(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,r=new Array(t);n0?u:t&&t.length&&ce(a)&&ce(i)?t.slice(a,i+1):[]};function $A(e){return e==="number"?[0,"auto"]:void 0}var Av=function(t,n,r,a){var i=t.graphicalItems,u=t.tooltipAxis,l=L0(n,t);return r<0||!i||!i.length||r>=l.length?null:i.reduce(function(c,m){var f,d=(f=m.props.data)!==null&&f!==void 0?f:n;d&&t.dataStartIndex+t.dataEndIndex!==0&&t.dataEndIndex-t.dataStartIndex>=r&&(d=d.slice(t.dataStartIndex,t.dataEndIndex+1));var v;if(u.dataKey&&!u.allowDuplicatedCategory){var _=d===void 0?l:d;v=Vp(_,u.dataKey,a)}else v=d&&d[r]||l[r];return v?[].concat(Ns(c),[RC(m,v)]):c},[])},CS=function(t,n,r,a){var i=a||{x:t.chartX,y:t.chartY},u=sJ(i,r),l=t.orderedTooltipTicks,c=t.tooltipAxis,m=t.tooltipTicks,f=zz(u,l,m,c);if(f>=0&&m){var d=m[f]&&m[f].value,v=Av(t,n,f,d),_=uJ(r,l,f,i);return{activeTooltipIndex:f,activeLabel:d,activePayload:v,activeCoordinate:_}}return null},lJ=function(t,n){var r=n.axes,a=n.graphicalItems,i=n.axisType,u=n.axisIdKey,l=n.stackGroups,c=n.dataStartIndex,m=n.dataEndIndex,f=t.layout,d=t.children,v=t.stackOffset,_=CC(f,i);return r.reduce(function(w,g){var y,b=g.type.defaultProps!==void 0?re(re({},g.type.defaultProps),g.props):g.props,O=b.type,C=b.dataKey,k=b.allowDataOverflow,P=b.allowDuplicatedCategory,A=b.scale,T=b.ticks,q=b.includeHidden,j=b[u];if(w[j])return w;var B=L0(t.data,{graphicalItems:a.filter(function(W){var oe,me=u in W.props?W.props[u]:(oe=W.type.defaultProps)===null||oe===void 0?void 0:oe[u];return me===j}),dataStartIndex:c,dataEndIndex:m}),$=B.length,M,H,F;MZ(b.domain,k,O)&&(M=F5(b.domain,null,k),_&&(O==="number"||A!=="auto")&&(F=Ju(B,C,"category")));var V=$A(O);if(!M||M.length===0){var K,J=(K=b.domain)!==null&&K!==void 0?K:V;if(C){if(M=Ju(B,C,O),O==="category"&&_){var z=jI(M);P&&z?(H=M,M=R1(0,$)):P||(M=Dw(J,M,g).reduce(function(W,oe){return W.indexOf(oe)>=0?W:[].concat(Ns(W),[oe])},[]))}else if(O==="category")P?M=M.filter(function(W){return W!==""&&!Re(W)}):M=Dw(J,M,g).reduce(function(W,oe){return W.indexOf(oe)>=0||oe===""||Re(oe)?W:[].concat(Ns(W),[oe])},[]);else if(O==="number"){var Y=Xz(B,a.filter(function(W){var oe,me,ge=u in W.props?W.props[u]:(oe=W.type.defaultProps)===null||oe===void 0?void 0:oe[u],Se="hide"in W.props?W.props.hide:(me=W.type.defaultProps)===null||me===void 0?void 0:me.hide;return ge===j&&(q||!Se)}),C,i,f);Y&&(M=Y)}_&&(O==="number"||A!=="auto")&&(F=Ju(B,C,"category"))}else _?M=R1(0,$):l&&l[j]&&l[j].hasStack&&O==="number"?M=v==="expand"?[0,1]:EC(l[j].stackGroups,c,m):M=kC(B,a.filter(function(W){var oe=u in W.props?W.props[u]:W.type.defaultProps[u],me="hide"in W.props?W.props.hide:W.type.defaultProps.hide;return oe===j&&(q||!me)}),O,f,!0);if(O==="number")M=Ov(d,M,j,i,T),J&&(M=F5(J,M,k));else if(O==="category"&&J){var Q=J,D=M.every(function(W){return Q.indexOf(W)>=0});D&&(M=Q)}}return re(re({},w),{},ke({},j,re(re({},b),{},{axisType:i,domain:M,categoricalDomain:F,duplicateDomain:H,originalDomain:(y=b.domain)!==null&&y!==void 0?y:V,isCategorical:_,layout:f})))},{})},cJ=function(t,n){var r=n.graphicalItems,a=n.Axis,i=n.axisType,u=n.axisIdKey,l=n.stackGroups,c=n.dataStartIndex,m=n.dataEndIndex,f=t.layout,d=t.children,v=L0(t.data,{graphicalItems:r,dataStartIndex:c,dataEndIndex:m}),_=v.length,w=CC(f,i),g=-1;return r.reduce(function(y,b){var O=b.type.defaultProps!==void 0?re(re({},b.type.defaultProps),b.props):b.props,C=O[u],k=$A("number");if(!y[C]){g++;var P;return w?P=R1(0,_):l&&l[C]&&l[C].hasStack?(P=EC(l[C].stackGroups,c,m),P=Ov(d,P,C,i)):(P=F5(k,kC(v,r.filter(function(A){var T,q,j=u in A.props?A.props[u]:(T=A.type.defaultProps)===null||T===void 0?void 0:T[u],B="hide"in A.props?A.props.hide:(q=A.type.defaultProps)===null||q===void 0?void 0:q.hide;return j===C&&!B}),"number",f),a.defaultProps.allowDataOverflow),P=Ov(d,P,C,i)),re(re({},y),{},ke({},C,re(re({axisType:i},a.defaultProps),{},{hide:!0,orientation:Xn(oJ,"".concat(i,".").concat(g%2),null),domain:P,originalDomain:k,isCategorical:w,layout:f})))}return y},{})},pJ=function(t,n){var r=n.axisType,a=r===void 0?"xAxis":r,i=n.AxisComp,u=n.graphicalItems,l=n.stackGroups,c=n.dataStartIndex,m=n.dataEndIndex,f=t.children,d="".concat(a,"Id"),v=Sn(f,i),_={};return v&&v.length?_=lJ(t,{axes:v,graphicalItems:u,axisType:a,axisIdKey:d,stackGroups:l,dataStartIndex:c,dataEndIndex:m}):u&&u.length&&(_=cJ(t,{Axis:i,graphicalItems:u,axisType:a,axisIdKey:d,stackGroups:l,dataStartIndex:c,dataEndIndex:m})),_},mJ=function(t){var n=za(t),r=aa(n,!1,!0);return{tooltipTicks:r,orderedTooltipTicks:y2(r,function(a){return a.coordinate}),tooltipAxis:n,tooltipAxisBandSize:x1(n,r)}},AS=function(t){var n=t.children,r=t.defaultShowTooltip,a=Tn(n,gs),i=0,u=0;return t.data&&t.data.length!==0&&(u=t.data.length-1),a&&a.props&&(a.props.startIndex>=0&&(i=a.props.startIndex),a.props.endIndex>=0&&(u=a.props.endIndex)),{chartX:0,chartY:0,dataStartIndex:i,dataEndIndex:u,activeTooltipIndex:-1,isTooltipActive:!!r}},dJ=function(t){return!t||!t.length?!1:t.some(function(n){var r=sa(n&&n.type);return r&&r.indexOf("Bar")>=0})},ES=function(t){return t==="horizontal"?{numericAxisName:"yAxis",cateAxisName:"xAxis"}:t==="vertical"?{numericAxisName:"xAxis",cateAxisName:"yAxis"}:t==="centric"?{numericAxisName:"radiusAxis",cateAxisName:"angleAxis"}:{numericAxisName:"angleAxis",cateAxisName:"radiusAxis"}},fJ=function(t,n){var r=t.props,a=t.graphicalItems,i=t.xAxisMap,u=i===void 0?{}:i,l=t.yAxisMap,c=l===void 0?{}:l,m=r.width,f=r.height,d=r.children,v=r.margin||{},_=Tn(d,gs),w=Tn(d,Vi),g=Object.keys(c).reduce(function(P,A){var T=c[A],q=T.orientation;return!T.mirror&&!T.hide?re(re({},P),{},ke({},q,P[q]+T.width)):P},{left:v.left||0,right:v.right||0}),y=Object.keys(u).reduce(function(P,A){var T=u[A],q=T.orientation;return!T.mirror&&!T.hide?re(re({},P),{},ke({},q,Xn(P,"".concat(q))+T.height)):P},{top:v.top||0,bottom:v.bottom||0}),b=re(re({},y),g),O=b.bottom;_&&(b.bottom+=_.props.height||gs.defaultProps.height),w&&n&&(b=Vz(b,a,r,n));var C=m-b.left-b.right,k=f-b.top-b.bottom;return re(re({brushBottom:O},b),{},{width:Math.max(C,0),height:Math.max(k,0)})},vJ=function(t,n){if(n==="xAxis")return t[n].width;if(n==="yAxis")return t[n].height},H0=function(t){var n=t.chartName,r=t.GraphicalChild,a=t.defaultTooltipEventType,i=a===void 0?"axis":a,u=t.validateTooltipEventTypes,l=u===void 0?["axis"]:u,c=t.axisComponents,m=t.legendContent,f=t.formatAxisMap,d=t.defaultProps,v=function(b,O){var C=O.graphicalItems,k=O.stackGroups,P=O.offset,A=O.updateId,T=O.dataStartIndex,q=O.dataEndIndex,j=b.barSize,B=b.layout,$=b.barGap,M=b.barCategoryGap,H=b.maxBarSize,F=ES(B),V=F.numericAxisName,K=F.cateAxisName,J=dJ(C),z=[];return C.forEach(function(Y,Q){var D=L0(b.data,{graphicalItems:[Y],dataStartIndex:T,dataEndIndex:q}),W=Y.type.defaultProps!==void 0?re(re({},Y.type.defaultProps),Y.props):Y.props,oe=W.dataKey,me=W.maxBarSize,ge=W["".concat(V,"Id")],Se=W["".concat(K,"Id")],qe={},pe=c.reduce(function(Xt,Yt){var si=O["".concat(Yt.axisType,"Map")],Ys=W["".concat(Yt.axisType,"Id")];si&&si[Ys]||Yt.axisType==="zAxis"||Qo();var Qs=si[Ys];return re(re({},Xt),{},ke(ke({},Yt.axisType,Qs),"".concat(Yt.axisType,"Ticks"),aa(Qs)))},qe),ae=pe[K],de=pe["".concat(K,"Ticks")],fe=k&&k[ge]&&k[ge].hasStack&&sU(Y,k[ge].stackGroups),te=sa(Y.type).indexOf("Bar")>=0,be=x1(ae,de),Ce=[],Le=J&&Uz({barSize:j,stackGroups:k,totalSize:vJ(pe,K)});if(te){var ze,ot,Gt=Re(me)?H:me,Mn=(ze=(ot=x1(ae,de,!0))!==null&&ot!==void 0?ot:Gt)!==null&&ze!==void 0?ze:0;Ce=Wz({barGap:$,barCategoryGap:M,bandSize:Mn!==be?Mn:be,sizeList:Le[Se],maxBarSize:Gt}),Mn!==be&&(Ce=Ce.map(function(Xt){return re(re({},Xt),{},{position:re(re({},Xt.position),{},{offset:Xt.position.offset-Mn/2})})}))}var In=Y&&Y.type&&Y.type.getComposedData;In&&z.push({props:re(re({},In(re(re({},pe),{},{displayedData:D,props:b,dataKey:oe,item:Y,bandSize:be,barPosition:Ce,offset:P,stackedData:fe,layout:B,dataStartIndex:T,dataEndIndex:q}))),{},ke(ke(ke({key:Y.key||"item-".concat(Q)},V,pe[V]),K,pe[K]),"animationId",A)),childIndex:VI(Y,b.children),item:Y})}),z},_=function(b,O){var C=b.props,k=b.dataStartIndex,P=b.dataEndIndex,A=b.updateId;if(!Z8({props:C}))return null;var T=C.children,q=C.layout,j=C.stackOffset,B=C.data,$=C.reverseStackOrder,M=ES(q),H=M.numericAxisName,F=M.cateAxisName,V=Sn(T,r),K=aU(B,V,"".concat(H,"Id"),"".concat(F,"Id"),j,$),J=c.reduce(function(W,oe){var me="".concat(oe.axisType,"Map");return re(re({},W),{},ke({},me,pJ(C,re(re({},oe),{},{graphicalItems:V,stackGroups:oe.axisType===H&&K,dataStartIndex:k,dataEndIndex:P}))))},{}),z=fJ(re(re({},J),{},{props:C,graphicalItems:V}),O==null?void 0:O.legendBBox);Object.keys(J).forEach(function(W){J[W]=f(C,J[W],z,W.replace("Map",""),n)});var Y=J["".concat(F,"Map")],Q=mJ(Y),D=v(C,re(re({},J),{},{dataStartIndex:k,dataEndIndex:P,updateId:A,graphicalItems:V,stackGroups:K,offset:z}));return re(re({formattedGraphicalItems:D,graphicalItems:V,offset:z,stackGroups:K},Q),J)},w=(function(y){function b(O){var C,k,P;return KZ(this,b),P=QZ(this,b,[O]),ke(P,"eventEmitterSymbol",Symbol("rechartsEventEmitter")),ke(P,"accessibilityManager",new jZ),ke(P,"handleLegendBBoxUpdate",function(A){if(A){var T=P.state,q=T.dataStartIndex,j=T.dataEndIndex,B=T.updateId;P.setState(re({legendBBox:A},_({props:P.props,dataStartIndex:q,dataEndIndex:j,updateId:B},re(re({},P.state),{},{legendBBox:A}))))}}),ke(P,"handleReceiveSyncEvent",function(A,T,q){if(P.props.syncId===A){if(q===P.eventEmitterSymbol&&typeof P.props.syncMethod!="function")return;P.applySyncEvent(T)}}),ke(P,"handleBrushChange",function(A){var T=A.startIndex,q=A.endIndex;if(T!==P.state.dataStartIndex||q!==P.state.dataEndIndex){var j=P.state.updateId;P.setState(function(){return re({dataStartIndex:T,dataEndIndex:q},_({props:P.props,dataStartIndex:T,dataEndIndex:q,updateId:j},P.state))}),P.triggerSyncEvent({dataStartIndex:T,dataEndIndex:q})}}),ke(P,"handleMouseEnter",function(A){var T=P.getMouseInfo(A);if(T){var q=re(re({},T),{},{isTooltipActive:!0});P.setState(q),P.triggerSyncEvent(q);var j=P.props.onMouseEnter;Ne(j)&&j(q,A)}}),ke(P,"triggeredAfterMouseMove",function(A){var T=P.getMouseInfo(A),q=T?re(re({},T),{},{isTooltipActive:!0}):{isTooltipActive:!1};P.setState(q),P.triggerSyncEvent(q);var j=P.props.onMouseMove;Ne(j)&&j(q,A)}),ke(P,"handleItemMouseEnter",function(A){P.setState(function(){return{isTooltipActive:!0,activeItem:A,activePayload:A.tooltipPayload,activeCoordinate:A.tooltipPosition||{x:A.cx,y:A.cy}}})}),ke(P,"handleItemMouseLeave",function(){P.setState(function(){return{isTooltipActive:!1}})}),ke(P,"handleMouseMove",function(A){A.persist(),P.throttleTriggeredAfterMouseMove(A)}),ke(P,"handleMouseLeave",function(A){P.throttleTriggeredAfterMouseMove.cancel();var T={isTooltipActive:!1};P.setState(T),P.triggerSyncEvent(T);var q=P.props.onMouseLeave;Ne(q)&&q(T,A)}),ke(P,"handleOuterEvent",function(A){var T=WI(A),q=Xn(P.props,"".concat(T));if(T&&Ne(q)){var j,B;/.*touch.*/i.test(T)?B=P.getMouseInfo(A.changedTouches[0]):B=P.getMouseInfo(A),q((j=B)!==null&&j!==void 0?j:{},A)}}),ke(P,"handleClick",function(A){var T=P.getMouseInfo(A);if(T){var q=re(re({},T),{},{isTooltipActive:!0});P.setState(q),P.triggerSyncEvent(q);var j=P.props.onClick;Ne(j)&&j(q,A)}}),ke(P,"handleMouseDown",function(A){var T=P.props.onMouseDown;if(Ne(T)){var q=P.getMouseInfo(A);T(q,A)}}),ke(P,"handleMouseUp",function(A){var T=P.props.onMouseUp;if(Ne(T)){var q=P.getMouseInfo(A);T(q,A)}}),ke(P,"handleTouchMove",function(A){A.changedTouches!=null&&A.changedTouches.length>0&&P.throttleTriggeredAfterMouseMove(A.changedTouches[0])}),ke(P,"handleTouchStart",function(A){A.changedTouches!=null&&A.changedTouches.length>0&&P.handleMouseDown(A.changedTouches[0])}),ke(P,"handleTouchEnd",function(A){A.changedTouches!=null&&A.changedTouches.length>0&&P.handleMouseUp(A.changedTouches[0])}),ke(P,"handleDoubleClick",function(A){var T=P.props.onDoubleClick;if(Ne(T)){var q=P.getMouseInfo(A);T(q,A)}}),ke(P,"handleContextMenu",function(A){var T=P.props.onContextMenu;if(Ne(T)){var q=P.getMouseInfo(A);T(q,A)}}),ke(P,"triggerSyncEvent",function(A){P.props.syncId!==void 0&&W9.emit(V9,P.props.syncId,A,P.eventEmitterSymbol)}),ke(P,"applySyncEvent",function(A){var T=P.props,q=T.layout,j=T.syncMethod,B=P.state.updateId,$=A.dataStartIndex,M=A.dataEndIndex;if(A.dataStartIndex!==void 0||A.dataEndIndex!==void 0)P.setState(re({dataStartIndex:$,dataEndIndex:M},_({props:P.props,dataStartIndex:$,dataEndIndex:M,updateId:B},P.state)));else if(A.activeTooltipIndex!==void 0){var H=A.chartX,F=A.chartY,V=A.activeTooltipIndex,K=P.state,J=K.offset,z=K.tooltipTicks;if(!J)return;if(typeof j=="function")V=j(z,A);else if(j==="value"){V=-1;for(var Y=0;Y=0){var fe,te;if(H.dataKey&&!H.allowDuplicatedCategory){var be=typeof H.dataKey=="function"?de:"payload.".concat(H.dataKey.toString());fe=Vp(Y,be,V),te=Q&&D&&Vp(D,be,V)}else fe=Y==null?void 0:Y[F],te=Q&&D&&D[F];if(Se||ge){var Ce=A.props.activeIndex!==void 0?A.props.activeIndex:F;return[R.cloneElement(A,re(re(re({},j.props),pe),{},{activeIndex:Ce})),null,null]}if(!Re(fe))return[ae].concat(Ns(P.renderActivePoints({item:j,activePoint:fe,basePoint:te,childIndex:F,isRange:Q})))}else{var Le,ze=(Le=P.getItemByXY(P.state.activeCoordinate))!==null&&Le!==void 0?Le:{graphicalItem:ae},ot=ze.graphicalItem,Gt=ot.item,Mn=Gt===void 0?A:Gt,In=ot.childIndex,Xt=re(re(re({},j.props),pe),{},{activeIndex:In});return[R.cloneElement(Mn,Xt),null,null]}return Q?[ae,null,null]:[ae,null]}),ke(P,"renderCustomized",function(A,T,q){return R.cloneElement(A,re(re({key:"recharts-customized-".concat(q)},P.props),P.state))}),ke(P,"renderMap",{CartesianGrid:{handler:Mp,once:!0},ReferenceArea:{handler:P.renderReferenceElement},ReferenceLine:{handler:Mp},ReferenceDot:{handler:P.renderReferenceElement},XAxis:{handler:Mp},YAxis:{handler:Mp},Brush:{handler:P.renderBrush,once:!0},Bar:{handler:P.renderGraphicChild},Line:{handler:P.renderGraphicChild},Area:{handler:P.renderGraphicChild},Radar:{handler:P.renderGraphicChild},RadialBar:{handler:P.renderGraphicChild},Scatter:{handler:P.renderGraphicChild},Pie:{handler:P.renderGraphicChild},Funnel:{handler:P.renderGraphicChild},Tooltip:{handler:P.renderCursor,once:!0},PolarGrid:{handler:P.renderPolarGrid,once:!0},PolarAngleAxis:{handler:P.renderPolarAxis},PolarRadiusAxis:{handler:P.renderPolarAxis},Customized:{handler:P.renderCustomized}}),P.clipPathId="".concat((C=O.id)!==null&&C!==void 0?C:ni("recharts"),"-clip"),P.throttleTriggeredAfterMouseMove=Ok(P.triggeredAfterMouseMove,(k=O.throttleDelay)!==null&&k!==void 0?k:1e3/60),P.state={},P}return eJ(b,y),YZ(b,[{key:"componentDidMount",value:function(){var C,k;this.addListener(),this.accessibilityManager.setDetails({container:this.container,offset:{left:(C=this.props.margin.left)!==null&&C!==void 0?C:0,top:(k=this.props.margin.top)!==null&&k!==void 0?k:0},coordinateList:this.state.tooltipTicks,mouseHandlerCallback:this.triggeredAfterMouseMove,layout:this.props.layout}),this.displayDefaultTooltip()}},{key:"displayDefaultTooltip",value:function(){var C=this.props,k=C.children,P=C.data,A=C.height,T=C.layout,q=Tn(k,Or);if(q){var j=q.props.defaultIndex;if(!(typeof j!="number"||j<0||j>this.state.tooltipTicks.length-1)){var B=this.state.tooltipTicks[j]&&this.state.tooltipTicks[j].value,$=Av(this.state,P,j,B),M=this.state.tooltipTicks[j].coordinate,H=(this.state.offset.top+A)/2,F=T==="horizontal",V=F?{x:M,y:H}:{y:M,x:H},K=this.state.formattedGraphicalItems.find(function(z){var Y=z.item;return Y.type.name==="Scatter"});K&&(V=re(re({},V),K.props.points[j].tooltipPosition),$=K.props.points[j].tooltipPayload);var J={activeTooltipIndex:j,isTooltipActive:!0,activeLabel:B,activePayload:$,activeCoordinate:V};this.setState(J),this.renderCursor(q),this.accessibilityManager.setIndex(j)}}}},{key:"getSnapshotBeforeUpdate",value:function(C,k){if(!this.props.accessibilityLayer)return null;if(this.state.tooltipTicks!==k.tooltipTicks&&this.accessibilityManager.setDetails({coordinateList:this.state.tooltipTicks}),this.props.layout!==C.layout&&this.accessibilityManager.setDetails({layout:this.props.layout}),this.props.margin!==C.margin){var P,A;this.accessibilityManager.setDetails({offset:{left:(P=this.props.margin.left)!==null&&P!==void 0?P:0,top:(A=this.props.margin.top)!==null&&A!==void 0?A:0}})}return null}},{key:"componentDidUpdate",value:function(C){c5([Tn(C.children,Or)],[Tn(this.props.children,Or)])||this.displayDefaultTooltip()}},{key:"componentWillUnmount",value:function(){this.removeListener(),this.throttleTriggeredAfterMouseMove.cancel()}},{key:"getTooltipEventType",value:function(){var C=Tn(this.props.children,Or);if(C&&typeof C.props.shared=="boolean"){var k=C.props.shared?"axis":"item";return l.indexOf(k)>=0?k:i}return i}},{key:"getMouseInfo",value:function(C){if(!this.container)return null;var k=this.container,P=k.getBoundingClientRect(),A=jH(P),T={chartX:Math.round(C.pageX-A.left),chartY:Math.round(C.pageY-A.top)},q=P.width/k.offsetWidth||1,j=this.inRange(T.chartX,T.chartY,q);if(!j)return null;var B=this.state,$=B.xAxisMap,M=B.yAxisMap,H=this.getTooltipEventType(),F=CS(this.state,this.props.data,this.props.layout,j);if(H!=="axis"&&$&&M){var V=za($).scale,K=za(M).scale,J=V&&V.invert?V.invert(T.chartX):null,z=K&&K.invert?K.invert(T.chartY):null;return re(re({},T),{},{xValue:J,yValue:z},F)}return F?re(re({},T),F):null}},{key:"inRange",value:function(C,k){var P=arguments.length>2&&arguments[2]!==void 0?arguments[2]:1,A=this.props.layout,T=C/P,q=k/P;if(A==="horizontal"||A==="vertical"){var j=this.state.offset,B=T>=j.left&&T<=j.left+j.width&&q>=j.top&&q<=j.top+j.height;return B?{x:T,y:q}:null}var $=this.state,M=$.angleAxisMap,H=$.radiusAxisMap;if(M&&H){var F=za(M);return Hw({x:T,y:q},F)}return null}},{key:"parseEventsOfWrapper",value:function(){var C=this.props.children,k=this.getTooltipEventType(),P=Tn(C,Or),A={};P&&k==="axis"&&(P.props.trigger==="click"?A={onClick:this.handleClick}:A={onMouseEnter:this.handleMouseEnter,onDoubleClick:this.handleDoubleClick,onMouseMove:this.handleMouseMove,onMouseLeave:this.handleMouseLeave,onTouchMove:this.handleTouchMove,onTouchStart:this.handleTouchStart,onTouchEnd:this.handleTouchEnd,onContextMenu:this.handleContextMenu});var T=Kp(this.props,this.handleOuterEvent);return re(re({},T),A)}},{key:"addListener",value:function(){W9.on(V9,this.handleReceiveSyncEvent)}},{key:"removeListener",value:function(){W9.removeListener(V9,this.handleReceiveSyncEvent)}},{key:"filterFormatItem",value:function(C,k,P){for(var A=this.state.formattedGraphicalItems,T=0,q=A.length;T");return e}const fr=R.forwardRef(({id:e,className:t,children:n,config:r,...a},i)=>{const u=R.useId(),l=`chart-${e||u.replace(/:/g,"")}`;return E.jsx(HA.Provider,{value:{config:r},children:E.jsxs("div",{"data-chart":l,ref:i,className:Je("flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-none [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-sector]:outline-none [&_.recharts-surface]:outline-none",t),...a,children:[E.jsx(_J,{id:l,config:r}),E.jsx(CH,{children:n})]})})});fr.displayName="Chart";const _J=({id:e,config:t})=>{const n=Object.entries(t).filter(([r,a])=>a.theme||a.color);return n.length?E.jsx("style",{dangerouslySetInnerHTML:{__html:Object.entries(yJ).map(([r,a])=>` ${a} [data-chart=${e}] { -${n.map(([o,i])=>{var u;const s=((u=i.theme)==null?void 0:u[r])||i.color;return s?` --color-${o}: ${s};`:null}).join(` +${n.map(([i,u])=>{var c;const l=((c=u.theme)==null?void 0:c[r])||u.color;return l?` --color-${i}: ${l};`:null}).join(` `)} } `).join(` -`)}}):null},sr=Zn,Hn=P.forwardRef(({active:e,payload:t,className:n,indicator:r="dot",hideLabel:a=!1,hideIndicator:o=!1,label:i,labelFormatter:s,labelClassName:u,formatter:l,color:p,nameKey:c,labelKey:m},d)=>{const{config:g}=tP(),f=P.useMemo(()=>{var x;if(a||!(t!=null&&t.length))return null;const[v]=t,h=`${m||v.dataKey||v.name||"value"}`,_=Bf(g,v,h),w=!m&&typeof i=="string"?((x=g[i])==null?void 0:x.label)||i:_==null?void 0:_.label;return s?b.jsx("div",{className:Pe("font-medium",u),children:s(w,t)}):w?b.jsx("div",{className:Pe("font-medium",u),children:w}):null},[i,s,t,a,u,g,m]);if(!e||!(t!=null&&t.length))return null;const y=t.length===1&&r!=="dot";return b.jsxs("div",{ref:d,className:Pe("grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl",n),children:[y?null:f,b.jsx("div",{className:"grid gap-1.5",children:t.map((v,h)=>{const _=`${c||v.name||v.dataKey||"value"}`,w=Bf(g,v,_),x=p||v.payload.fill||v.color;return b.jsx("div",{className:Pe("flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground",r==="dot"&&"items-center"),children:l&&(v==null?void 0:v.value)!==void 0&&v.name?l(v.value,v.name,v,h,v.payload):b.jsxs(b.Fragment,{children:[w!=null&&w.icon?b.jsx(w.icon,{}):!o&&b.jsx("div",{className:Pe("shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]",{"h-2.5 w-2.5":r==="dot","w-1":r==="line","w-0 border-[1.5px] border-dashed bg-transparent":r==="dashed","my-0.5":y&&r==="dashed"}),style:{"--color-bg":x,"--color-border":x}}),b.jsxs("div",{className:Pe("flex flex-1 justify-between leading-none",y?"items-end":"items-center"),children:[b.jsxs("div",{className:"grid gap-1.5",children:[y?f:null,b.jsx("span",{className:"text-muted-foreground",children:(w==null?void 0:w.label)||v.name})]}),v.value&&b.jsx("span",{className:"font-mono font-medium tabular-nums text-foreground",children:v.value.toLocaleString()})]})]})},v.dataKey)})})]})});Hn.displayName="ChartTooltip";const die=P.forwardRef(({className:e,hideIcon:t=!1,payload:n,verticalAlign:r="bottom",nameKey:a},o)=>{const{config:i}=tP();return n!=null&&n.length?b.jsx("div",{ref:o,className:Pe("flex items-center justify-center gap-4",r==="top"?"pb-3":"pt-3",e),children:n.map(s=>{const u=`${a||s.dataKey||"value"}`,l=Bf(i,s,u);return b.jsxs("div",{className:Pe("flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"),children:[l!=null&&l.icon&&!t?b.jsx(l.icon,{}):b.jsx("div",{className:"h-2 w-2 shrink-0 rounded-[2px]",style:{backgroundColor:s.color}}),l==null?void 0:l.label]},s.value)})}):null});die.displayName="ChartLegend";function Bf(e,t,n){if(typeof t!="object"||t===null)return;const r="payload"in t&&typeof t.payload=="object"&&t.payload!==null?t.payload:void 0;let a=n;return n in t&&typeof t[n]=="string"?a=t[n]:r&&n in r&&typeof r[n]=="string"&&(a=r[n]),a in e?e[a]:e[n]}const fie={empty:{icon:tx,title:"No Data Available",description:"There is no data to display at the moment."},error:{icon:GN,title:"Failed to Load Data",description:"An error occurred while loading the data. Please try again."},loading:{icon:rx,title:"Loading Data",description:"Please wait while we fetch the latest information."},"no-data":{icon:Q_,title:"No Chart Data",description:"No data available to display in the chart."}},vie=({type:e="empty",title:t,description:n,action:r,className:a})=>{const o=fie[e],i=o.icon;return b.jsx(_e,{className:`border-dashed ${a}`,children:b.jsxs(we,{className:"flex flex-col items-center justify-center py-12 px-6 text-center",children:[b.jsx("div",{className:"rounded-full bg-gray-100 p-3 mb-4",children:b.jsx(i,{className:`h-8 w-8 text-gray-400 ${e==="loading"?"animate-spin":""}`})}),b.jsx(xe,{className:"text-lg font-medium text-gray-900 mb-2",children:t||o.title}),b.jsx("p",{className:"text-sm text-gray-500 mb-6 max-w-sm",children:n||o.description}),r&&b.jsxs(Sp,{onClick:r.onClick,variant:"outline",size:"sm",children:[b.jsx(rx,{className:"h-4 w-4 mr-2"}),r.label]})]})})},Gn=({onRetry:e})=>b.jsx(vie,{type:"no-data",title:"No Chart Data",description:"Unable to generate chart with the current data set.",action:e?{label:"Retry",onClick:e}:void 0}),ur=({text:e="Kind Cluster / GitHub CI",position:t="top-center",className:n=""})=>{const r=()=>{switch(t){case"bottom-left":return"bottom-8 left-4";case"bottom-right":return"bottom-8 right-4";case"bottom-center":return"bottom-8 left-1/2 transform -translate-x-1/2";case"top-left":return"top-4 left-4";case"top-right":return"top-4 right-4";case"top-center":return"left-1/2 transform -translate-x-1/2 -translate-y-1/2";default:return"bottom-8 left-1/2 transform -translate-x-1/2"}};return b.jsxs("div",{className:`absolute ${r()} z-10 flex items-center gap-1 px-2 py-1 bg-indigo-600/40 rounded-md border border-gray-200/30 shadow-sm ${n}`,children:[b.jsx(nx,{className:"h-3 w-3 text-white"}),b.jsx("span",{className:"text-xs text-white font-medium",children:e})]})},hie=({performanceMatrix:e,benchmarkResults:t,testConfiguration:n,performanceSummary:r,latencyPercentileComparison:a})=>{const o=e.filter(c=>c.phase==="scaling-up").map(c=>({routes:c.routes,throughput:Math.round(c.throughput),latency:Number(c.meanLatency.toFixed(1))})),i=t.filter(c=>c.phase==="scaling-up").map(c=>({routes:c.routes,gateway:Math.round(c.resources.envoyGateway.memory.mean),proxy:Math.round(c.resources.envoyProxy.memory.mean),total:Math.round(c.resources.envoyGateway.memory.mean+c.resources.envoyProxy.memory.mean)})),u=(()=>{if(a&&a.length>0){const c=a.filter(m=>m.phase==="scaling-up").sort((m,d)=>d.routes-m.routes)[0];if(c)return[{percentile:"P50",value:Number(c.p50.toFixed(1)),status:"excellent"},{percentile:"P75",value:Number(c.p75.toFixed(1)),status:"excellent"},{percentile:"P90",value:Number(c.p90.toFixed(1)),status:"good"},{percentile:"P95",value:Number(c.p95.toFixed(1)),status:"acceptable"},{percentile:"P99",value:Number(c.p99.toFixed(1)),status:"watch"}]}if(t&&t.length>0){const c=t.filter(m=>m.phase==="scaling-up").sort((m,d)=>d.routes-m.routes)[0];if(c&&c.latency&&c.latency.percentiles){const m=c.latency.percentiles;return[{percentile:"P50",value:Number(m.p50.toFixed(1)),status:"excellent"},{percentile:"P75",value:Number(m.p75.toFixed(1)),status:"excellent"},{percentile:"P90",value:Number(m.p90.toFixed(1)),status:"good"},{percentile:"P95",value:Number(m.p95.toFixed(1)),status:"acceptable"},{percentile:"P99",value:Number(m.p99.toFixed(1)),status:"watch"}]}}return null})(),l=i.map(c=>({routes:c.routes,gatewayPerRoute:Number((c.gateway/c.routes).toFixed(2)),proxyPerRoute:Number((c.proxy/c.routes).toFixed(2)),totalPerRoute:Number((c.total/c.routes).toFixed(2))})),p={throughput:{label:"Throughput",color:"#8b5cf6"},latency:{label:"Latency",color:"#6366f1"},gateway:{label:"Gateway",color:"#a855f7"},proxy:{label:"Proxy",color:"#4f46e5"},totalPerRoute:{label:"Total per Route",color:"#8b5cf6"},gatewayPerRoute:{label:"Gateway per Route",color:"#a855f7"},proxyPerRoute:{label:"Proxy per Route",color:"#4f46e5"}};return b.jsxs("div",{className:"space-y-6",children:[b.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[b.jsxs(_e,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"Avg Throughput"}),b.jsx(XN,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[Math.round(r.avgThroughput)," RPS"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Consistent across all scales"})]})]}),b.jsxs(_e,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"Mean Response Time"}),b.jsx(ex,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[r.avgLatency.toFixed(1),"ms"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"End-to-end as measured by Nighthawk"})]})]}),b.jsxs(_e,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"Max Routes in Test"}),b.jsx(ox,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsx("div",{className:"text-2xl font-bold",children:r.maxRoutes}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Routes tested successfully"})]})]}),b.jsxs(_e,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"Reliability"}),b.jsx(WN,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsx("div",{className:"text-2xl font-bold",children:"100%"}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Perfect system reliability"})]})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(_e,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"Throughput Consistency"}),b.jsx(nn,{children:"Throughput remains stable across different route scales"})]}),b.jsx(we,{children:o&&o.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(ur,{}),b.jsx(Ln,{config:p,children:b.jsxs(C0,{data:o,children:[b.jsx(Dn,{strokeDasharray:"3 3"}),b.jsx(Nt,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(gt,{domain:[0,"dataMax"],tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}`}),b.jsx(sr,{content:b.jsx(Hn,{formatter:(c,m)=>[`${c} RPS`,"Throughput"],labelFormatter:c=>`${c} routes`})}),b.jsx(xt,{dataKey:"throughput",type:"monotone",fill:"#8b5cf6",fillOpacity:.4,stroke:"#8b5cf6",strokeWidth:2})]})})]}):b.jsx(Gn,{})})]}),b.jsxs(_e,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"Memory Usage"}),b.jsx(nn,{children:"Memory scaling patterns for Gateway and Proxy components"})]}),b.jsx(we,{children:i&&i.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(ur,{}),b.jsx(Ln,{config:p,children:b.jsxs(C0,{data:i,children:[b.jsx(Dn,{strokeDasharray:"3 3"}),b.jsx(Nt,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(gt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}MB`}),b.jsx(sr,{content:b.jsx(Hn,{})}),b.jsx(xt,{dataKey:"gateway",type:"monotone",fill:"#a855f7",fillOpacity:.4,stroke:"#a855f7",strokeWidth:2}),b.jsx(xt,{dataKey:"proxy",type:"monotone",fill:"#4f46e5",fillOpacity:.4,stroke:"#4f46e5",strokeWidth:2})]})})]}):b.jsx(Gn,{})})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(_e,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"Request RTT Distribution"}),b.jsx(nn,{children:"Latency percentiles at 1000 routes (worst case)"})]}),b.jsx(we,{children:u?b.jsxs("div",{className:"relative",children:[b.jsx(ur,{}),b.jsx(Ln,{config:p,children:b.jsxs(JS,{data:u,children:[b.jsx(Dn,{strokeDasharray:"3 3"}),b.jsx(Nt,{dataKey:"percentile",tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(gt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}ms`}),b.jsx(sr,{content:b.jsx(Hn,{formatter:(c,m)=>[`${c}ms`,"Latency"]})}),b.jsx(Vr,{dataKey:"value",fill:"#6366f1",radius:[4,4,0,0]})]})})]}):b.jsx(Gn,{})})]}),b.jsxs(_e,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"Memory Efficiency"}),b.jsx(nn,{children:"Memory usage per route shows how efficiently memory scales with route count"})]}),b.jsx(we,{children:l&&l.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(ur,{}),b.jsx(Ln,{config:p,children:b.jsxs(l5,{data:l,children:[b.jsx(Dn,{strokeDasharray:"3 3"}),b.jsx(Nt,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(gt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}MB`}),b.jsx(sr,{content:b.jsx(Hn,{formatter:(c,m)=>[`${c}MB per route`,m==="gatewayPerRoute"?"Gateway":m==="proxyPerRoute"?"Proxy":"Total"],labelFormatter:c=>`${c} routes`})}),b.jsx(Bt,{dataKey:"totalPerRoute",type:"monotone",stroke:"#8b5cf6",strokeWidth:3,dot:{fill:"#8b5cf6",strokeWidth:2,r:4}}),b.jsx(Bt,{dataKey:"gatewayPerRoute",type:"monotone",stroke:"#a855f7",strokeWidth:2,strokeDasharray:"5 5",dot:{fill:"#a855f7",strokeWidth:2,r:3}}),b.jsx(Bt,{dataKey:"proxyPerRoute",type:"monotone",stroke:"#4f46e5",strokeWidth:2,strokeDasharray:"3 3",dot:{fill:"#4f46e5",strokeWidth:2,r:3}})]})})]}):b.jsx(Gn,{})})]})]})]})},yie=({latencyPercentileComparison:e,benchmarkResults:t})=>{const n=e.filter(c=>c.phase==="scaling-up").map(c=>({routes:c.routes,p50:Number(c.p50.toFixed(1)),p95:Number(c.p95.toFixed(1)),p99:Number(c.p99.toFixed(1))})),a=(()=>{if(e&&e.length>0){const c=e.filter(m=>m.phase==="scaling-up").sort((m,d)=>d.routes-m.routes)[0];if(c)return[{percentile:"P50",value:Number(c.p50.toFixed(1)),category:"Median",status:"excellent"},{percentile:"P75",value:Number(c.p75.toFixed(1)),category:"75th",status:"excellent"},{percentile:"P90",value:Number(c.p90.toFixed(1)),category:"90th",status:"good"},{percentile:"P95",value:Number(c.p95.toFixed(1)),category:"95th",status:"watch"},{percentile:"P99",value:Number(c.p99.toFixed(1)),category:"99th",status:"alert"}]}if(t&&t.length>0){const c=t.filter(m=>m.phase==="scaling-up").sort((m,d)=>d.routes-m.routes)[0];if(c&&c.latency&&c.latency.percentiles){const m=c.latency.percentiles;return[{percentile:"P50",value:Number(m.p50.toFixed(1)),category:"Median",status:"excellent"},{percentile:"P75",value:Number(m.p75.toFixed(1)),category:"75th",status:"excellent"},{percentile:"P90",value:Number(m.p90.toFixed(1)),category:"90th",status:"good"},{percentile:"P95",value:Number(m.p95.toFixed(1)),category:"95th",status:"watch"},{percentile:"P99",value:Number(m.p99.toFixed(1)),category:"99th",status:"alert"}]}}return null})(),o=t.filter(c=>c.phase==="scaling-up").map(c=>({routes:c.routes,mean:Number(c.latency.mean.toFixed(1)),p95:Number(c.latency.percentiles.p95.toFixed(1)),ratio:Number((c.latency.percentiles.p95/c.latency.mean).toFixed(1))})),s=e&&e.length>0?e.filter(c=>c.phase==="scaling-up").sort((c,m)=>c.routes-m.routes).map(c=>({scale:`${c.routes} Routes`,p50:Number(c.p50.toFixed(1)),p95:Number(c.p95.toFixed(1)),p99:Number(c.p99.toFixed(1))})):null,u={p50:{label:"P50 (Median)",color:"#8b5cf6"},p95:{label:"P95",color:"#6366f1"},p99:{label:"P99",color:"#4f46e5"},mean:{label:"Mean",color:"#a855f7"},ratio:{label:"P95/Mean Ratio",color:"#7c3aed"}},p=(()=>{if(n.length===0)return{medianLatency:0,p95Latency:0,p99Latency:0,consistencyRatio:0};const c=n[n.length-1],m=o.length>0?o.reduce((d,g)=>d+g.ratio,0)/o.length:0;return{medianLatency:(c==null?void 0:c.p50)||0,p95Latency:(c==null?void 0:c.p95)||0,p99Latency:(c==null?void 0:c.p99)||0,consistencyRatio:m}})();return b.jsxs("div",{className:"space-y-6",children:[b.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[b.jsxs(_e,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"Median RTT"}),b.jsx(VN,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[p.medianLatency.toFixed(1),"ms"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Consistent across all scales"})]})]}),b.jsxs(_e,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"P95 RTT"}),b.jsx(zN,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[p.p95Latency.toFixed(1),"ms"]}),b.jsxs("p",{className:"text-xs text-muted-foreground",children:["95% of requests under ",p.p95Latency.toFixed(0),"ms"]})]})]}),b.jsxs(_e,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"Tail RTT"}),b.jsx(KN,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[p.p99Latency.toFixed(1),"ms"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"P99 RTT (1% of requests)"})]})]}),b.jsxs(_e,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"Consistency"}),b.jsx(J_,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[p.consistencyRatio.toFixed(1),":1"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"P95/Mean ratio"})]})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(_e,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"Request RTT Scaling Behavior"}),b.jsx(nn,{children:"How key percentiles perform as route count increases"})]}),b.jsx(we,{children:n&&n.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(ur,{}),b.jsx(Ln,{config:u,children:b.jsxs(C0,{data:n,children:[b.jsx(Dn,{strokeDasharray:"3 3"}),b.jsx(Nt,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(gt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}ms`}),b.jsx(sr,{content:b.jsx(Hn,{labelFormatter:c=>`${c} routes`})}),b.jsx(xt,{dataKey:"p99",type:"monotone",fill:"#4f46e5",fillOpacity:.2,stroke:"#4f46e5",strokeWidth:2}),b.jsx(xt,{dataKey:"p95",type:"monotone",fill:"#6366f1",fillOpacity:.3,stroke:"#6366f1",strokeWidth:2}),b.jsx(xt,{dataKey:"p50",type:"monotone",fill:"#8b5cf6",fillOpacity:.4,stroke:"#8b5cf6",strokeWidth:2})]})})]}):b.jsx(Gn,{})})]}),b.jsxs(_e,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"Request RTT Distribution"}),b.jsx(nn,{children:"Percentile breakdown at 1000 routes (worst case scenario)"})]}),b.jsx(we,{children:a?b.jsxs("div",{className:"relative",children:[b.jsx(ur,{}),b.jsx(Ln,{config:u,children:b.jsxs(JS,{data:a,children:[b.jsx(Dn,{strokeDasharray:"3 3"}),b.jsx(Nt,{dataKey:"percentile",tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(gt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}ms`}),b.jsx(sr,{content:b.jsx(Hn,{formatter:(c,m)=>[`${c}ms`,"RTT"],labelFormatter:c=>`${c} Percentile`})}),b.jsx(Vr,{dataKey:"value",fill:"#6366f1",radius:[4,4,0,0]})]})})]}):b.jsx(Gn,{})})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(_e,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"Request RTT Consistency"}),b.jsx(nn,{children:"P95/Mean ratio shows how predictable RTT is"})]}),b.jsx(we,{children:o&&o.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(ur,{}),b.jsx(Ln,{config:u,children:b.jsxs(l5,{data:o,children:[b.jsx(Dn,{strokeDasharray:"3 3"}),b.jsx(Nt,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(gt,{yAxisId:"ratio",orientation:"left",tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}x`}),b.jsx(gt,{yAxisId:"latency",orientation:"right",tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:c=>`${c}ms`}),b.jsx(sr,{content:b.jsx(Hn,{labelFormatter:c=>`${c} routes`})}),b.jsx(Bt,{yAxisId:"latency",dataKey:"mean",type:"monotone",stroke:"#a855f7",strokeWidth:2,dot:{fill:"#a855f7",strokeWidth:2,r:3}}),b.jsx(Bt,{yAxisId:"ratio",dataKey:"ratio",type:"monotone",stroke:"#7c3aed",strokeWidth:3,strokeDasharray:"5 5",dot:{fill:"#7c3aed",strokeWidth:2,r:4}})]})})]}):b.jsx(Gn,{})})]}),b.jsxs(_e,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"Performance Summary"}),b.jsx(nn,{children:"RTT performance at different scales"})]}),b.jsx(we,{children:s&&s.length>0?b.jsx("div",{className:"space-y-4",children:s.map((c,m)=>b.jsx("div",{className:"flex items-center justify-between p-3 bg-muted/30 rounded-lg",children:b.jsxs("div",{className:"space-y-1",children:[b.jsx("p",{className:"font-medium",children:c.scale}),b.jsxs("div",{className:"flex space-x-4 text-sm text-muted-foreground",children:[b.jsxs("span",{children:["P50: ",c.p50,"ms"]}),b.jsxs("span",{children:["P95: ",c.p95,"ms"]}),b.jsxs("span",{children:["P99: ",c.p99,"ms"]})]})]})},m))}):b.jsx(Gn,{})})]})]})]})},gie=({resourceTrends:e,benchmarkResults:t})=>{const n=t.filter(m=>m.phase==="scaling-up").map(m=>({routes:m.routes,gateway:Math.round(m.resources.envoyGateway.memory.mean),proxy:Math.round(m.resources.envoyProxy.memory.mean),total:Math.round(m.resources.envoyGateway.memory.mean+m.resources.envoyProxy.memory.mean)})),r=t.filter(m=>m.phase==="scaling-up").map(m=>({routes:m.routes,gatewayMean:Number(m.resources.envoyGateway.cpu.mean.toFixed(1)),gatewayMax:Number(m.resources.envoyGateway.cpu.max.toFixed(1)),proxyMean:Number(m.resources.envoyProxy.cpu.mean.toFixed(1)),proxyMax:Number(m.resources.envoyProxy.cpu.max.toFixed(1))})),a=n.map(m=>({routes:m.routes,gatewayPerRoute:Number((m.gateway/m.routes).toFixed(2)),proxyPerRoute:Number((m.proxy/m.routes).toFixed(2)),totalPerRoute:Number((m.total/m.routes).toFixed(2))})),o=()=>{if(n.length===0)return[{component:"Gateway",min:0,max:0,scaling:"No Data",efficiency:"Unknown"},{component:"Proxy",min:0,max:0,scaling:"No Data",efficiency:"Unknown"},{component:"Total",min:0,max:0,scaling:"No Data",efficiency:"Unknown"}];const m=n.map(f=>f.gateway),d=n.map(f=>f.proxy),g=n.map(f=>f.total);return[{component:"Gateway",min:Math.min(...m),max:Math.max(...m),scaling:i(n.map(f=>f.routes),m),efficiency:s(n.map(f=>f.routes),m)},{component:"Proxy",min:Math.min(...d),max:Math.max(...d),scaling:i(n.map(f=>f.routes),d),efficiency:s(n.map(f=>f.routes),d)},{component:"Total",min:Math.min(...g),max:Math.max(...g),scaling:i(n.map(f=>f.routes),g),efficiency:s(n.map(f=>f.routes),g)}]},i=(m,d)=>{if(m.length<3)return"Insufficient Data";const g=m.length,f=m.reduce(($,R)=>$+R,0),y=d.reduce(($,R)=>$+R,0),v=m.reduce(($,R,q)=>$+R*d[q],0),h=m.reduce(($,R)=>$+R*R,0),_=d.reduce(($,R)=>$+R*R,0),w=g*v-f*y,x=Math.sqrt((g*h-f*f)*(g*_-y*y)),S=x===0?0:w/x,O=S*S,k=[];for(let $=1;$$+R,0)/k.length,N=k.reduce(($,R)=>$+Math.pow(R-C,2),0)/k.length,T=Math.sqrt(N),A=C===0?0:Math.abs(T/C);return O>.95?"Highly Linear":O>.85?"Linear":A>1.5?"Step-wise":O>.7?"Moderately Linear":"Variable"},s=(m,d)=>{if(m.length<2)return"Unknown";const g=m.map((x,S)=>d[S]/x),f=g[0],y=g[g.length-1],v=(f-y)/f,h=g.reduce((x,S)=>x+S,0)/g.length,_=g.reduce((x,S)=>x+Math.pow(S-h,2),0)/g.length,w=Math.sqrt(_)/h;return v>.3?"Excellent":v>.1||w<.2?"Good":w<.4?"Moderate":"Variable"},u=o(),l={gateway:{label:"Gateway",color:"#a855f7"},proxy:{label:"Proxy",color:"#4f46e5"},gatewayMean:{label:"Gateway Mean",color:"#8b5cf6"},gatewayMax:{label:"Gateway Peak",color:"#c084fc"},proxyMean:{label:"Proxy Mean",color:"#6366f1"},proxyMax:{label:"Proxy Peak",color:"#818cf8"}},c=(()=>{if(n.length===0||r.length===0||a.length===0)return{gatewayMemoryRange:"0-0MB",proxyMemoryRange:"0-0MB",peakGatewayMeanCPU:0,memoryPerRouteAtScale:0};const m=n.map(S=>S.gateway),d=n.map(S=>S.proxy),g=Math.min(...m),f=Math.max(...m),y=Math.min(...d),v=Math.max(...d),h=r.map(S=>S.gatewayMean),_=h.length>0?Math.max(...h):0,w=a[a.length-1],x=(w==null?void 0:w.totalPerRoute)||0;return{gatewayMemoryRange:`${g}-${f}MB`,proxyMemoryRange:`${y}-${v}MB`,peakGatewayMeanCPU:Math.round(_),memoryPerRouteAtScale:x}})();return b.jsxs("div",{className:"space-y-6",children:[b.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-4 gap-4",children:[b.jsxs(_e,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"Gateway Memory"}),b.jsx(tx,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsx("div",{className:"text-2xl font-bold",children:c.gatewayMemoryRange}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Linear scaling pattern"})]})]}),b.jsxs(_e,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"Proxy Memory"}),b.jsx(ax,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsx("div",{className:"text-2xl font-bold",children:c.proxyMemoryRange}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Efficient step-wise scaling"})]})]}),b.jsxs(_e,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"Peak Gateway Mean CPU"}),b.jsx(BN,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[c.peakGatewayMeanCPU,"%"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Highest average Gateway CPU usage"})]})]}),b.jsxs(_e,{children:[b.jsxs(Se,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[b.jsx(xe,{className:"text-sm font-medium",children:"Efficiency"}),b.jsx(ox,{className:"h-4 w-4 text-muted-foreground"})]}),b.jsxs(we,{children:[b.jsxs("div",{className:"text-2xl font-bold",children:[c.memoryPerRouteAtScale.toFixed(2),"MB"]}),b.jsx("p",{className:"text-xs text-muted-foreground",children:"Memory per route at scale"})]})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(_e,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"Memory Scaling"}),b.jsx(nn,{children:"How Gateway and Proxy memory usage grows with route count"})]}),b.jsx(we,{children:n&&n.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(ur,{}),b.jsx(Ln,{config:l,children:b.jsxs(C0,{data:n,children:[b.jsx(Dn,{strokeDasharray:"3 3"}),b.jsx(Nt,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(gt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:m=>`${m}MB`}),b.jsx(sr,{content:b.jsx(Hn,{labelFormatter:m=>`${m} routes`})}),b.jsx(xt,{dataKey:"gateway",type:"monotone",fill:"#a855f7",fillOpacity:.4,stroke:"#a855f7",strokeWidth:2}),b.jsx(xt,{dataKey:"proxy",type:"monotone",fill:"#4f46e5",fillOpacity:.4,stroke:"#4f46e5",strokeWidth:2})]})})]}):b.jsx(Gn,{})})]}),b.jsxs(_e,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"Gateway CPU Usage Patterns"}),b.jsx(nn,{children:"Gateway mean vs peak CPU usage. Shows how Gateway CPU usage is affected by scaling up routes."})]}),b.jsx(we,{children:r&&r.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(ur,{}),b.jsx(Ln,{config:l,children:b.jsxs(cie,{data:r,children:[b.jsx(Dn,{strokeDasharray:"3 3"}),b.jsx(Nt,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(gt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:m=>`${m}%`}),b.jsx(sr,{content:b.jsx(Hn,{labelFormatter:m=>`${m} routes`})}),b.jsx(xt,{dataKey:"gatewayMax",type:"monotone",fill:"#c084fc",fillOpacity:.1,stroke:"#c084fc",strokeWidth:1,strokeDasharray:"2 2"}),b.jsx(Bt,{dataKey:"gatewayMean",type:"monotone",stroke:"#8b5cf6",strokeWidth:3,dot:{fill:"#8b5cf6",strokeWidth:2,r:4}})]})})]}):b.jsx(Gn,{})})]})]}),b.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[b.jsxs(_e,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"Memory Efficiency"}),b.jsx(nn,{children:"Memory usage per route shows how efficiently memory scales with route count"})]}),b.jsx(we,{children:a&&a.length>0?b.jsxs("div",{className:"relative",children:[b.jsx(ur,{}),b.jsx(Ln,{config:l,children:b.jsxs(l5,{data:a,children:[b.jsx(Dn,{strokeDasharray:"3 3"}),b.jsx(Nt,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),b.jsx(gt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:m=>`${m}MB`}),b.jsx(sr,{content:b.jsx(Hn,{formatter:(m,d)=>[`${m}MB per route`,d==="gatewayPerRoute"?"Gateway":d==="proxyPerRoute"?"Proxy":"Total"],labelFormatter:m=>`${m} routes`})}),b.jsx(Bt,{dataKey:"totalPerRoute",type:"monotone",stroke:"#8b5cf6",strokeWidth:3,dot:{fill:"#8b5cf6",strokeWidth:2,r:4}}),b.jsx(Bt,{dataKey:"gatewayPerRoute",type:"monotone",stroke:"#a855f7",strokeWidth:2,strokeDasharray:"5 5",dot:{fill:"#a855f7",strokeWidth:2,r:3}}),b.jsx(Bt,{dataKey:"proxyPerRoute",type:"monotone",stroke:"#4f46e5",strokeWidth:2,strokeDasharray:"3 3",dot:{fill:"#4f46e5",strokeWidth:2,r:3}})]})})]}):b.jsx(Gn,{})})]}),b.jsxs(_e,{children:[b.jsxs(Se,{children:[b.jsx(xe,{children:"Memory Scaling Summary"}),b.jsx(nn,{children:"Memory usage characteristics and scaling patterns across different components"})]}),b.jsx(we,{children:b.jsx("div",{className:"space-y-4",children:u.map((m,d)=>b.jsxs("div",{className:"flex items-center justify-between p-3 bg-muted/30 rounded-lg",children:[b.jsxs("div",{className:"space-y-1",children:[b.jsx("p",{className:"font-medium",children:m.component}),b.jsxs("div",{className:"flex space-x-4 text-sm text-muted-foreground",children:[b.jsxs("span",{children:["Range: ",m.min,"-",m.max,"MB"]}),b.jsxs("span",{children:["Pattern: ",m.scaling]})]})]}),b.jsxs("div",{className:"flex items-center space-x-2",children:[b.jsx(J_,{className:"h-4 w-4 text-green-600"}),b.jsx("span",{className:"text-sm font-medium text-green-700",children:m.efficiency})]})]},d))})})]})]})]})};var ld="rovingFocusGroup.onEntryFocus",_ie={bubbles:!1,cancelable:!0},Hl="RovingFocusGroup",[Ff,nP,xie]=A8(Hl),[wie,rP]=fs(Hl,[xie]),[bie,Sie]=wie(Hl),aP=P.forwardRef((e,t)=>b.jsx(Ff.Provider,{scope:e.__scopeRovingFocusGroup,children:b.jsx(Ff.Slot,{scope:e.__scopeRovingFocusGroup,children:b.jsx(Pie,{...e,ref:t})})}));aP.displayName=Hl;var Pie=P.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:n,orientation:r,loop:a=!1,dir:o,currentTabStopId:i,defaultCurrentTabStopId:s,onCurrentTabStopIdChange:u,onEntryFocus:l,preventScrollOnEntryFocus:p=!1,...c}=e,m=P.useRef(null),d=Qe(t,m),g=U4(o),[f,y]=xp({prop:i,defaultProp:s??null,onChange:u,caller:Hl}),[v,h]=P.useState(!1),_=Aa(l),w=nP(n),x=P.useRef(!1),[S,O]=P.useState(0);return P.useEffect(()=>{const k=m.current;if(k)return k.addEventListener(ld,_),()=>k.removeEventListener(ld,_)},[_]),b.jsx(bie,{scope:n,orientation:r,dir:g,loop:a,currentTabStopId:f,onItemFocus:P.useCallback(k=>y(k),[y]),onItemShiftTab:P.useCallback(()=>h(!0),[]),onFocusableItemAdd:P.useCallback(()=>O(k=>k+1),[]),onFocusableItemRemove:P.useCallback(()=>O(k=>k-1),[]),children:b.jsx(Ee.div,{tabIndex:v||S===0?-1:0,"data-orientation":r,...c,ref:d,style:{outline:"none",...e.style},onMouseDown:de(e.onMouseDown,()=>{x.current=!0}),onFocus:de(e.onFocus,k=>{const C=!x.current;if(k.target===k.currentTarget&&C&&!v){const N=new CustomEvent(ld,_ie);if(k.currentTarget.dispatchEvent(N),!N.defaultPrevented){const T=w().filter(M=>M.focusable),A=T.find(M=>M.active),$=T.find(M=>M.id===f),q=[A,$,...T].filter(Boolean).map(M=>M.ref.current);sP(q,p)}}x.current=!1}),onBlur:de(e.onBlur,()=>h(!1))})})}),oP="RovingFocusGroupItem",iP=P.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:n,focusable:r=!0,active:a=!1,tabStopId:o,children:i,...s}=e,u=jl(),l=o||u,p=Sie(oP,n),c=p.currentTabStopId===l,m=nP(n),{onFocusableItemAdd:d,onFocusableItemRemove:g,currentTabStopId:f}=p;return P.useEffect(()=>{if(r)return d(),()=>g()},[r,d,g]),b.jsx(Ff.ItemSlot,{scope:n,id:l,focusable:r,active:a,children:b.jsx(Ee.span,{tabIndex:c?0:-1,"data-orientation":p.orientation,...s,ref:t,onMouseDown:de(e.onMouseDown,y=>{r?p.onItemFocus(l):y.preventDefault()}),onFocus:de(e.onFocus,()=>p.onItemFocus(l)),onKeyDown:de(e.onKeyDown,y=>{if(y.key==="Tab"&&y.shiftKey){p.onItemShiftTab();return}if(y.target!==y.currentTarget)return;const v=Cie(y,p.orientation,p.dir);if(v!==void 0){if(y.metaKey||y.ctrlKey||y.altKey||y.shiftKey)return;y.preventDefault();let _=m().filter(w=>w.focusable).map(w=>w.ref.current);if(v==="last")_.reverse();else if(v==="prev"||v==="next"){v==="prev"&&_.reverse();const w=_.indexOf(y.currentTarget);_=p.loop?Aie(_,w+1):_.slice(w+1)}setTimeout(()=>sP(_))}}),children:typeof i=="function"?i({isCurrentTabStop:c,hasTabStop:f!=null}):i})})});iP.displayName=oP;var Oie={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function kie(e,t){return t!=="rtl"?e:e==="ArrowLeft"?"ArrowRight":e==="ArrowRight"?"ArrowLeft":e}function Cie(e,t,n){const r=kie(e.key,n);if(!(t==="vertical"&&["ArrowLeft","ArrowRight"].includes(r))&&!(t==="horizontal"&&["ArrowUp","ArrowDown"].includes(r)))return Oie[r]}function sP(e,t=!1){const n=document.activeElement;for(const r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function Aie(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var Eie=aP,Nie=iP;function Tie(e,t){return P.useReducer((n,r)=>t[n][r]??n,e)}var c5=e=>{const{present:t,children:n}=e,r=jie(t),a=typeof n=="function"?n({present:r.isPresent}):P.Children.only(n),o=Qe(r.ref,Rie(a));return typeof n=="function"||r.isPresent?P.cloneElement(a,{ref:o}):null};c5.displayName="Presence";function jie(e){const[t,n]=P.useState(),r=P.useRef(null),a=P.useRef(e),o=P.useRef("none"),i=e?"mounted":"unmounted",[s,u]=Tie(i,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return P.useEffect(()=>{const l=kc(r.current);o.current=s==="mounted"?l:"none"},[s]),jt(()=>{const l=r.current,p=a.current;if(p!==e){const m=o.current,d=kc(l);e?u("MOUNT"):d==="none"||(l==null?void 0:l.display)==="none"?u("UNMOUNT"):u(p&&m!==d?"ANIMATION_OUT":"UNMOUNT"),a.current=e}},[e,u]),jt(()=>{if(t){let l;const p=t.ownerDocument.defaultView??window,c=d=>{const f=kc(r.current).includes(CSS.escape(d.animationName));if(d.target===t&&f&&(u("ANIMATION_END"),!a.current)){const y=t.style.animationFillMode;t.style.animationFillMode="forwards",l=p.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=y)})}},m=d=>{d.target===t&&(o.current=kc(r.current))};return t.addEventListener("animationstart",m),t.addEventListener("animationcancel",c),t.addEventListener("animationend",c),()=>{p.clearTimeout(l),t.removeEventListener("animationstart",m),t.removeEventListener("animationcancel",c),t.removeEventListener("animationend",c)}}else u("ANIMATION_END")},[t,u]),{isPresent:["mounted","unmountSuspended"].includes(s),ref:P.useCallback(l=>{r.current=l?getComputedStyle(l):null,n(l)},[])}}function kc(e){return(e==null?void 0:e.animationName)||"none"}function Rie(e){var r,a;let t=(r=Object.getOwnPropertyDescriptor(e.props,"ref"))==null?void 0:r.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=(a=Object.getOwnPropertyDescriptor(e,"ref"))==null?void 0:a.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var U1="Tabs",[$ie]=fs(U1,[rP]),uP=rP(),[Mie,p5]=$ie(U1),lP=P.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,onValueChange:a,defaultValue:o,orientation:i="horizontal",dir:s,activationMode:u="automatic",...l}=e,p=U4(s),[c,m]=xp({prop:r,onChange:a,defaultProp:o??"",caller:U1});return b.jsx(Mie,{scope:n,baseId:jl(),value:c,onValueChange:m,orientation:i,dir:p,activationMode:u,children:b.jsx(Ee.div,{dir:p,"data-orientation":i,...l,ref:t})})});lP.displayName=U1;var cP="TabsList",pP=P.forwardRef((e,t)=>{const{__scopeTabs:n,loop:r=!0,...a}=e,o=p5(cP,n),i=uP(n);return b.jsx(Eie,{asChild:!0,...i,orientation:o.orientation,dir:o.dir,loop:r,children:b.jsx(Ee.div,{role:"tablist","aria-orientation":o.orientation,...a,ref:t})})});pP.displayName=cP;var mP="TabsTrigger",dP=P.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,disabled:a=!1,...o}=e,i=p5(mP,n),s=uP(n),u=hP(i.baseId,r),l=yP(i.baseId,r),p=r===i.value;return b.jsx(Nie,{asChild:!0,...s,focusable:!a,active:p,children:b.jsx(Ee.button,{type:"button",role:"tab","aria-selected":p,"aria-controls":l,"data-state":p?"active":"inactive","data-disabled":a?"":void 0,disabled:a,id:u,...o,ref:t,onMouseDown:de(e.onMouseDown,c=>{!a&&c.button===0&&c.ctrlKey===!1?i.onValueChange(r):c.preventDefault()}),onKeyDown:de(e.onKeyDown,c=>{[" ","Enter"].includes(c.key)&&i.onValueChange(r)}),onFocus:de(e.onFocus,()=>{const c=i.activationMode!=="manual";!p&&!a&&c&&i.onValueChange(r)})})})});dP.displayName=mP;var fP="TabsContent",vP=P.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,forceMount:a,children:o,...i}=e,s=p5(fP,n),u=hP(s.baseId,r),l=yP(s.baseId,r),p=r===s.value,c=P.useRef(p);return P.useEffect(()=>{const m=requestAnimationFrame(()=>c.current=!1);return()=>cancelAnimationFrame(m)},[]),b.jsx(c5,{present:a||p,children:({present:m})=>b.jsx(Ee.div,{"data-state":p?"active":"inactive","data-orientation":s.orientation,role:"tabpanel","aria-labelledby":u,hidden:!m,id:l,tabIndex:0,...i,ref:t,style:{...e.style,animationDuration:c.current?"0s":void 0},children:m&&o})})});vP.displayName=fP;function hP(e,t){return`${e}-trigger-${t}`}function yP(e,t){return`${e}-content-${t}`}var qie=lP,gP=pP,_P=dP,xP=vP;const Iie=qie,wP=P.forwardRef(({className:e,...t},n)=>b.jsx(gP,{ref:n,className:Pe("inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground",e),...t}));wP.displayName=gP.displayName;const Fc=P.forwardRef(({className:e,...t},n)=>b.jsx(_P,{ref:n,className:Pe("inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",e),...t}));Fc.displayName=_P.displayName;const zc=P.forwardRef(({className:e,...t},n)=>b.jsx(xP,{ref:n,className:Pe("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",e),...t}));zc.displayName=xP.displayName;const Die={metadata:{version:"1.7.1",runId:"1.7.1-release-2026-03-12",date:"2026-03-12T17:15:44Z",environment:"GitHub Release",description:"Benchmark results for version 1.7.1 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.7.1/benchmark_report.zip",testConfiguration:{rps:100,connections:100,duration:90,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:404.46067415730334,totalRequests:35997,latency:{max:21.831679,min:.36027200000000004,mean:.50792,pstdev:.327603,percentiles:{p50:.47825500000000004,p75:.494671,p80:.500831,p90:.524479,p95:.565567,p99:1.174719,p999:4.073215}},resources:{envoyGateway:{memory:{max:141.2109375,min:126.21484375,mean:134.95377604166666},cpu:{max:1.2666666666666664,min:.3999999999999996,mean:.6333333333333335}},envoyProxy:{memory:{max:23.01953125,min:6.2890625,mean:21.337369791666667},cpu:{max:10.880065789473683,min:6.7053471008693455,mean:9.803489410005396}}},poolOverflow:3,upstreamConnections:9,counters:{"benchmark.http_2xx":{value:35997,perSecond:404.46067415730334},"benchmark.pool_overflow":{value:3,perSecond:.033707865168539325},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:9,perSecond:.10112359550561797},upstream_cx_rx_bytes_total:{value:5651529,perSecond:63500.32584269663},upstream_cx_total:{value:9,perSecond:.10112359550561797},upstream_cx_tx_bytes_total:{value:1619865,perSecond:18200.73033707865},upstream_rq_pending_overflow:{value:3,perSecond:.033707865168539325},upstream_rq_pending_total:{value:9,perSecond:.10112359550561797},upstream_rq_total:{value:35997,perSecond:404.46067415730334}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1199.7777777777778,totalRequests:107980,latency:{max:33.160191,min:.350496,mean:.502856,pstdev:.381932,percentiles:{p50:.46670300000000003,p75:.48307100000000003,p80:.488031,p90:.509791,p95:.563007,p99:1.395775,p999:4.814335}},resources:{envoyGateway:{memory:{max:147.07421875,min:133.85546875,mean:142.88971354166668},cpu:{max:2.066666666666667,min:.46666666666666556,mean:.8288888888888886}},envoyProxy:{memory:{max:29.1484375,min:26.9921875,mean:28.961067708333335},cpu:{max:31.337084666860616,min:16.902799943566244,mean:27.581361126197127}}},poolOverflow:20,upstreamConnections:28,counters:{"benchmark.http_2xx":{value:107980,perSecond:1199.7777777777778},"benchmark.pool_overflow":{value:20,perSecond:.2222222222222222},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:28,perSecond:.3111111111111111},upstream_cx_rx_bytes_total:{value:16952860,perSecond:188365.11111111112},upstream_cx_total:{value:28,perSecond:.3111111111111111},upstream_cx_tx_bytes_total:{value:4859100,perSecond:53990},upstream_rq_pending_overflow:{value:20,perSecond:.2222222222222222},upstream_rq_pending_total:{value:28,perSecond:.3111111111111111},upstream_rq_total:{value:107980,perSecond:1199.7777777777778}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:2020.8988764044943,totalRequests:179860,latency:{max:159.686655,min:.34865599999999997,mean:.555528,pstdev:.899074,percentiles:{p50:.465487,p75:.49182299999999995,p80:.499215,p90:.559263,p95:.823231,p99:2.489599,p999:9.310207}},resources:{envoyGateway:{memory:{max:148.53125,min:141.1015625,mean:146.11067708333334},cpu:{max:2.666666666666666,min:.5333333333333339,mean:1.0111111111111104}},envoyProxy:{memory:{max:35.53515625,min:33.25390625,mean:35.204166666666666},cpu:{max:50.98887138280554,min:28.235218195210045,mean:46.107534023712816}}},poolOverflow:140,upstreamConnections:53,counters:{"benchmark.http_2xx":{value:179860,perSecond:2020.8988764044943},"benchmark.pool_overflow":{value:140,perSecond:1.5730337078651686},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:53,perSecond:.5955056179775281},upstream_cx_rx_bytes_total:{value:28238020,perSecond:317281.1235955056},upstream_cx_total:{value:53,perSecond:.5955056179775281},upstream_cx_tx_bytes_total:{value:8093700,perSecond:90940.44943820225},upstream_rq_pending_overflow:{value:140,perSecond:1.5730337078651686},upstream_rq_pending_total:{value:53,perSecond:.5955056179775281},upstream_rq_total:{value:179860,perSecond:2020.8988764044943}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3199.5333333333333,totalRequests:287958,latency:{max:195.354623,min:.340448,mean:2.3120990000000003,pstdev:9.991765999999998,percentiles:{p50:.643839,p75:.961279,p80:1.1813749999999998,p90:2.493439,p95:4.838911,p99:56.819711,p999:139.632639}},resources:{envoyGateway:{memory:{max:155.48828125,min:145.59765625,mean:151.63020833333334},cpu:{max:5.266666666666662,min:.86666666666666,mean:1.6333333333333317}},envoyProxy:{memory:{max:70.109375,min:57.375,mean:62.9921875},cpu:{max:73.13433104940499,min:72.0589681943401,mean:72.51389466052387}}},poolOverflow:40,upstreamConnections:360,counters:{"benchmark.http_2xx":{value:287958,perSecond:3199.5333333333333},"benchmark.pool_overflow":{value:40,perSecond:.4444444444444444},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:360,perSecond:4},upstream_cx_rx_bytes_total:{value:45209406,perSecond:502326.73333333334},upstream_cx_total:{value:360,perSecond:4},upstream_cx_tx_bytes_total:{value:12958200,perSecond:143980},upstream_rq_pending_overflow:{value:40,perSecond:.4444444444444444},upstream_rq_pending_total:{value:360,perSecond:4},upstream_rq_total:{value:287960,perSecond:3199.5555555555557}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3999.788888888889,totalRequests:359981,latency:{max:1183.7767669999998,min:.348768,mean:8.674752000000002,pstdev:30.238035,percentiles:{p50:1.351807,p75:3.699583,p80:5.259263,p90:16.358911,p95:57.106431,p99:116.441087,p999:181.805055}},resources:{envoyGateway:{memory:{max:167.328125,min:162.40625,mean:165.52278645833334},cpu:{max:7.1999999999999895,min:.9999999999999905,mean:2.0555318550119233}},envoyProxy:{memory:{max:94.5546875,min:84.5390625,mean:90.65416666666667},cpu:{max:85.74224964628205,min:85.12550198150596,mean:85.30171560001341}}},poolOverflow:15,upstreamConnections:385,counters:{"benchmark.http_2xx":{value:359981,perSecond:3999.788888888889},"benchmark.pool_overflow":{value:15,perSecond:.16666666666666666},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:385,perSecond:4.277777777777778},upstream_cx_rx_bytes_total:{value:56517017,perSecond:627966.8555555556},upstream_cx_total:{value:385,perSecond:4.277777777777778},upstream_cx_tx_bytes_total:{value:16199325,perSecond:179992.5},upstream_rq_pending_overflow:{value:15,perSecond:.16666666666666666},upstream_rq_pending_total:{value:385,perSecond:4.277777777777778},upstream_rq_total:{value:359985,perSecond:3999.8333333333335}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:4313.4157303370785,totalRequests:383894,latency:{max:2317.615103,min:2.001856,mean:80.580335,pstdev:34.233291,percentiles:{p50:78.331903,p75:91.250687,p80:93.556735,p90:99.053567,p95:106.225663,p99:156.770303,p999:198.262783}},resources:{envoyGateway:{memory:{max:189.859375,min:177.27734375,mean:184.05078125},cpu:{max:14.133333333333365,min:.8666666666667312,mean:3.2955555555555662}},envoyProxy:{memory:{max:146.84375,min:137.078125,mean:144.76744791666667},cpu:{max:99.10046568276267,min:56.52672818023091,mean:88.91415783040362}}},poolOverflow:54,upstreamConnections:346,counters:{"benchmark.http_2xx":{value:383894,perSecond:4313.4157303370785},"benchmark.pool_overflow":{value:54,perSecond:.6067415730337079},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:346,perSecond:3.8876404494382024},upstream_cx_rx_bytes_total:{value:60271358,perSecond:677206.2696629213},upstream_cx_total:{value:346,perSecond:3.8876404494382024},upstream_cx_tx_bytes_total:{value:17290800,perSecond:194278.65168539327},upstream_rq_pending_overflow:{value:54,perSecond:.6067415730337079},upstream_rq_pending_total:{value:346,perSecond:3.8876404494382024},upstream_rq_total:{value:384240,perSecond:4317.303370786517}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3998.7,totalRequests:359883,latency:{max:576.323583,min:.337072,mean:6.515112,pstdev:17.650902,percentiles:{p50:1.259839,p75:3.451263,p80:4.744959,p90:13.520383,p95:35.483647,p99:96.186367,p999:157.630463}},resources:{envoyGateway:{memory:{max:182.9140625,min:171.34375,mean:175.60807291666666},cpu:{max:1.466666666666659,min:.933333333333337,mean:1.1466666666666656}},envoyProxy:{memory:{max:146.94140625,min:144.984375,mean:145.9390625},cpu:{max:86.54882356499097,min:60.09245426968198,mean:80.62355319860941}}},poolOverflow:95,upstreamConnections:305,counters:{"benchmark.http_2xx":{value:359883,perSecond:3998.7},"benchmark.pool_overflow":{value:95,perSecond:1.0555555555555556},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:305,perSecond:3.388888888888889},upstream_cx_rx_bytes_total:{value:56501631,perSecond:627795.9},upstream_cx_total:{value:305,perSecond:3.388888888888889},upstream_cx_tx_bytes_total:{value:16195725,perSecond:179952.5},upstream_rq_pending_overflow:{value:95,perSecond:1.0555555555555556},upstream_rq_pending_total:{value:305,perSecond:3.388888888888889},upstream_rq_total:{value:359905,perSecond:3998.9444444444443}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3199.266666666667,totalRequests:287934,latency:{max:292.716543,min:.32511999999999996,mean:2.174077,pstdev:8.738519,percentiles:{p50:.648095,p75:1.035167,p80:1.354623,p90:2.638975,p95:5.187583,p99:44.509183,p999:99.930111}},resources:{envoyGateway:{memory:{max:172.57421875,min:157.23046875,mean:163.800390625},cpu:{max:1.2000000000000455,min:1.066666666666644,mean:1.1333340751525947}},envoyProxy:{memory:{max:145.29296875,min:141.73828125,mean:142.549609375},cpu:{max:73.15572640218886,min:44.218809476424916,mean:65.55157206751501}}},poolOverflow:61,upstreamConnections:339,counters:{"benchmark.http_2xx":{value:287934,perSecond:3199.266666666667},"benchmark.pool_overflow":{value:61,perSecond:.6777777777777778},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:339,perSecond:3.7666666666666666},upstream_cx_rx_bytes_total:{value:45205638,perSecond:502284.86666666664},upstream_cx_total:{value:339,perSecond:3.7666666666666666},upstream_cx_tx_bytes_total:{value:12957255,perSecond:143969.5},upstream_rq_pending_overflow:{value:61,perSecond:.6777777777777778},upstream_rq_pending_total:{value:339,perSecond:3.7666666666666666},upstream_rq_total:{value:287939,perSecond:3199.322222222222}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:1999.0222222222221,totalRequests:179912,latency:{max:66.826239,min:.358272,mean:.551723,pstdev:.927127,percentiles:{p50:.468031,p75:.487647,p80:.49355099999999996,p90:.531871,p95:.759775,p99:2.020607,p999:11.134975}},resources:{envoyGateway:{memory:{max:161.9765625,min:149.421875,mean:152.75846354166666},cpu:{max:1.2000000000000455,min:1.066666666666644,mean:1.099999999999994}},envoyProxy:{memory:{max:141.02734375,min:138.734375,mean:139.32994791666667},cpu:{max:51.284291616457324,min:32.19114984765026,mean:47.86547970682163}}},poolOverflow:88,upstreamConnections:60,counters:{"benchmark.http_2xx":{value:179912,perSecond:1999.0222222222221},"benchmark.pool_overflow":{value:88,perSecond:.9777777777777777},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:60,perSecond:.6666666666666666},upstream_cx_rx_bytes_total:{value:28246184,perSecond:313846.4888888889},upstream_cx_total:{value:60,perSecond:.6666666666666666},upstream_cx_tx_bytes_total:{value:8096040,perSecond:89956},upstream_rq_pending_overflow:{value:88,perSecond:.9777777777777777},upstream_rq_pending_total:{value:60,perSecond:.6666666666666666},upstream_rq_total:{value:179912,perSecond:1999.0222222222221}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1212.6404494382023,totalRequests:107925,latency:{max:65.267711,min:.353296,mean:.527068,pstdev:.932132,percentiles:{p50:.46964700000000004,p75:.486287,p80:.490863,p90:.5107510000000001,p95:.5663349999999999,p99:1.548991,p999:9.021439}},resources:{envoyGateway:{memory:{max:152.046875,min:148.2265625,mean:149.540625},cpu:{max:1.1999999999999507,min:1.0000000000000377,mean:1.0757575757575657}},envoyProxy:{memory:{max:138.80859375,min:138.703125,mean:138.75911458333334},cpu:{max:31.886488894168092,min:19.332278206834392,mean:27.251537958002597}}},poolOverflow:75,upstreamConnections:40,counters:{"benchmark.http_2xx":{value:107925,perSecond:1212.6404494382023},"benchmark.pool_overflow":{value:75,perSecond:.8426966292134831},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:40,perSecond:.449438202247191},upstream_cx_rx_bytes_total:{value:16944225,perSecond:190384.55056179775},upstream_cx_total:{value:40,perSecond:.449438202247191},upstream_cx_tx_bytes_total:{value:4856625,perSecond:54568.8202247191},upstream_rq_pending_overflow:{value:75,perSecond:.8426966292134831},upstream_rq_pending_total:{value:40,perSecond:.449438202247191},upstream_rq_total:{value:107925,perSecond:1212.6404494382023}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:404.39325842696627,totalRequests:35991,latency:{max:52.789246999999996,min:.379296,mean:.535933,pstdev:.861002,percentiles:{p50:.480127,p75:.499503,p80:.506415,p90:.534079,p95:.5791029999999999,p99:1.305727,p999:8.827391}},resources:{envoyGateway:{memory:{max:151.6875,min:142.6875,mean:146.77421875},cpu:{max:1.2000000000000455,min:1.0000000000000377,mean:1.0833333333333348}},envoyProxy:{memory:{max:138.79296875,min:138.6875,mean:138.7109375},cpu:{max:10.990164787510622,min:6.4548566601374775,mean:9.83564108772025}}},poolOverflow:9,upstreamConnections:15,counters:{"benchmark.http_2xx":{value:35991,perSecond:404.39325842696627},"benchmark.pool_overflow":{value:9,perSecond:.10112359550561797},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:15,perSecond:.16853932584269662},upstream_cx_rx_bytes_total:{value:5650587,perSecond:63489.74157303371},upstream_cx_total:{value:15,perSecond:.16853932584269662},upstream_cx_tx_bytes_total:{value:1619595,perSecond:18197.696629213482},upstream_rq_pending_overflow:{value:9,perSecond:.10112359550561797},upstream_rq_pending_total:{value:15,perSecond:.16853932584269662},upstream_rq_total:{value:35991,perSecond:404.39325842696627}}}]},Lie={metadata:{version:"1.7.0",runId:"1.7.0-release-2026-02-05",date:"2026-02-05T22:23:47Z",environment:"GitHub Release",description:"Benchmark results for version 1.7.0 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.7.0/benchmark_report.zip",testConfiguration:{rps:100,connections:100,duration:90,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:404.4943820224719,totalRequests:36e3,latency:{max:20.996095,min:.29254399999999997,mean:.392865,pstdev:.234214,percentiles:{p50:.376687,p75:.391071,p80:.396143,p90:.41241500000000003,p95:.435103,p99:.815903,p999:3.045503}},resources:{envoyGateway:{memory:{max:138.95703125,min:116.44921875,mean:132.88359375},cpu:{max:1.1333333333333337,min:.26666666666666694,mean:.5023809523809526}},envoyProxy:{memory:{max:22.7890625,min:6.25,mean:21.124088541666666},cpu:{max:8.392692429188166,min:8.392692429188166,mean:8.392692429188166}}},poolOverflow:0,upstreamConnections:8,counters:{"benchmark.http_2xx":{value:36e3,perSecond:404.4943820224719},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:8,perSecond:.0898876404494382},upstream_cx_rx_bytes_total:{value:5652e3,perSecond:63505.61797752809},upstream_cx_total:{value:8,perSecond:.0898876404494382},upstream_cx_tx_bytes_total:{value:162e4,perSecond:18202.247191011236},upstream_rq_pending_total:{value:8,perSecond:.0898876404494382},upstream_rq_total:{value:36e3,perSecond:404.4943820224719}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1213.0449438202247,totalRequests:107961,latency:{max:76.619775,min:.260456,mean:.38059699999999996,pstdev:.742124,percentiles:{p50:.35684699999999997,p75:.369695,p80:.37345500000000004,p90:.386127,p95:.407487,p99:.741503,p999:3.233663}},resources:{envoyGateway:{memory:{max:141.91015625,min:132.375,mean:139.46731770833333},cpu:{max:1.9333333333333333,min:.33333333333333215,mean:.7222222222222222}},envoyProxy:{memory:{max:28.9453125,min:26.76953125,mean:28.652213541666665},cpu:{max:24.348176941615478,min:16.925555708766215,mean:22.918668536759185}}},poolOverflow:39,upstreamConnections:34,counters:{"benchmark.http_2xx":{value:107961,perSecond:1213.0449438202247},"benchmark.pool_overflow":{value:39,perSecond:.43820224719101125},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:34,perSecond:.38202247191011235},upstream_cx_rx_bytes_total:{value:16949877,perSecond:190448.05617977527},upstream_cx_total:{value:34,perSecond:.38202247191011235},upstream_cx_tx_bytes_total:{value:4858245,perSecond:54587.02247191011},upstream_rq_pending_overflow:{value:39,perSecond:.43820224719101125},upstream_rq_pending_total:{value:34,perSecond:.38202247191011235},upstream_rq_total:{value:107961,perSecond:1213.0449438202247}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:2021.9775280898875,totalRequests:179956,latency:{max:35.938303,min:.24958400000000003,mean:.360931,pstdev:.352214,percentiles:{p50:.345583,p75:.360431,p80:.363695,p90:.376079,p95:.404991,p99:.8741749999999999,p999:3.010431}},resources:{envoyGateway:{memory:{max:147.76171875,min:140.00390625,mean:143.31015625},cpu:{max:2.4666666666666672,min:.46666666666666556,mean:.862222222222222}},envoyProxy:{memory:{max:35.27734375,min:32.88671875,mean:34.832942708333334},cpu:{max:38.243800513752305,min:36.42319860496981,mean:37.312253068263566}}},poolOverflow:44,upstreamConnections:28,counters:{"benchmark.http_2xx":{value:179956,perSecond:2021.9775280898875},"benchmark.pool_overflow":{value:44,perSecond:.4943820224719101},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:28,perSecond:.3146067415730337},upstream_cx_rx_bytes_total:{value:28253092,perSecond:317450.47191011236},upstream_cx_total:{value:28,perSecond:.3146067415730337},upstream_cx_tx_bytes_total:{value:8098020,perSecond:90988.98876404495},upstream_rq_pending_overflow:{value:44,perSecond:.4943820224719101},upstream_rq_pending_total:{value:28,perSecond:.3146067415730337},upstream_rq_total:{value:179956,perSecond:2021.9775280898875}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3199.5222222222224,totalRequests:287957,latency:{max:69.099519,min:.229736,mean:.562037,pstdev:2.4478809999999998,percentiles:{p50:.33948700000000004,p75:.384655,p80:.43838299999999997,p90:.49603099999999994,p95:.628447,p99:2.546431,p999:44.222463}},resources:{envoyGateway:{memory:{max:156.15234375,min:145.50390625,mean:152.67447916666666},cpu:{max:4.733333333333327,min:.7333333333333295,mean:1.3666666666666663}},envoyProxy:{memory:{max:62.18359375,min:57.375,mean:60.349609375},cpu:{max:57.686706657779716,min:56.90183246073298,mean:57.38613645993947}}},poolOverflow:43,upstreamConnections:177,counters:{"benchmark.http_2xx":{value:287957,perSecond:3199.5222222222224},"benchmark.pool_overflow":{value:43,perSecond:.4777777777777778},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:177,perSecond:1.9666666666666666},upstream_cx_rx_bytes_total:{value:45209249,perSecond:502324.9888888889},upstream_cx_total:{value:177,perSecond:1.9666666666666666},upstream_cx_tx_bytes_total:{value:12958065,perSecond:143978.5},upstream_rq_pending_overflow:{value:43,perSecond:.4777777777777778},upstream_rq_pending_total:{value:177,perSecond:1.9666666666666666},upstream_rq_total:{value:287957,perSecond:3199.5222222222224}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3999.088888888889,totalRequests:359918,latency:{max:153.878527,min:.20744,mean:1.240927,pstdev:6.1772670000000005,percentiles:{p50:.444351,p75:.504159,p80:.537535,p90:.7239030000000001,p95:1.070271,p99:34.512895,p999:76.099583}},resources:{envoyGateway:{memory:{max:165.05078125,min:158.30078125,mean:162.92018229166666},cpu:{max:7.266666666666666,min:.6666666666666762,mean:1.968876744256573}},envoyProxy:{memory:{max:89.16796875,min:79.9453125,mean:85.46458333333334},cpu:{max:64.9697469866435,min:64.3614700614124,mean:64.53535528621765}}},poolOverflow:81,upstreamConnections:314,counters:{"benchmark.http_2xx":{value:359918,perSecond:3999.088888888889},"benchmark.pool_overflow":{value:81,perSecond:.9},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:314,perSecond:3.488888888888889},upstream_cx_rx_bytes_total:{value:56507126,perSecond:627856.9555555555},upstream_cx_total:{value:314,perSecond:3.488888888888889},upstream_cx_tx_bytes_total:{value:16196355,perSecond:179959.5},upstream_rq_pending_overflow:{value:81,perSecond:.9},upstream_rq_pending_total:{value:314,perSecond:3.488888888888889},upstream_rq_total:{value:359919,perSecond:3999.1}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:7998.9,totalRequests:719901,latency:{max:612.2045430000001,min:.224096,mean:10.839886,pstdev:17.041939,percentiles:{p50:2.2106869999999996,p75:16.740863,p80:24.484863,p90:33.835007,p95:39.696383000000004,p99:85.680127,p999:96.747519}},resources:{envoyGateway:{memory:{max:184.7734375,min:168.8125,mean:179.18958333333333},cpu:{max:12.533333333333301,min:.7999999999999354,mean:2.7400000000000064}},envoyProxy:{memory:{max:142.8515625,min:137.015625,mean:141.06419270833334},cpu:{max:99.09098152526053,min:59.47936166053764,mean:90.50754321831067}}},poolOverflow:95,upstreamConnections:305,counters:{"benchmark.http_2xx":{value:719901,perSecond:7998.9},"benchmark.pool_overflow":{value:95,perSecond:1.0555555555555556},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:305,perSecond:3.388888888888889},upstream_cx_rx_bytes_total:{value:113024457,perSecond:12558273e-1},upstream_cx_total:{value:305,perSecond:3.388888888888889},upstream_cx_tx_bytes_total:{value:32395725,perSecond:359952.5},upstream_rq_pending_overflow:{value:95,perSecond:1.0555555555555556},upstream_rq_pending_total:{value:305,perSecond:3.388888888888889},upstream_rq_total:{value:719905,perSecond:7998.944444444444}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3998.9777777777776,totalRequests:359908,latency:{max:96.98918300000001,min:.21712,mean:1.214108,pstdev:5.909787,percentiles:{p50:.446463,p75:.48827099999999996,p80:.5066390000000001,p90:.617279,p95:.841503,p99:35.389439,p999:73.859071}},resources:{envoyGateway:{memory:{max:180.0546875,min:168.95703125,mean:172.00481770833332},cpu:{max:1.000000000000038,min:.8000000000000304,mean:.966666666666674}},envoyProxy:{memory:{max:142.19921875,min:141.73828125,mean:142.04947916666666},cpu:{max:65.55879881534545,min:38.38425750701383,mean:57.566019955372525}}},poolOverflow:92,upstreamConnections:308,counters:{"benchmark.http_2xx":{value:359908,perSecond:3998.9777777777776},"benchmark.pool_overflow":{value:92,perSecond:1.0222222222222221},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:308,perSecond:3.422222222222222},upstream_cx_rx_bytes_total:{value:56505556,perSecond:627839.5111111111},upstream_cx_total:{value:308,perSecond:3.422222222222222},upstream_cx_tx_bytes_total:{value:16195860,perSecond:179954},upstream_rq_pending_overflow:{value:92,perSecond:1.0222222222222221},upstream_rq_pending_total:{value:308,perSecond:3.422222222222222},upstream_rq_total:{value:359908,perSecond:3998.9777777777776}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3199.1111111111113,totalRequests:287920,latency:{max:70.762495,min:.240672,mean:.617723,pstdev:2.804425,percentiles:{p50:.352303,p75:.441039,p80:.450911,p90:.5074390000000001,p95:.623903,p99:2.854783,p999:49.215487}},resources:{envoyGateway:{memory:{max:171.9140625,min:154.85546875,mean:159.69309895833334},cpu:{max:1.0000000000000377,min:.933333333333337,mean:.9472222222222332}},envoyProxy:{memory:{max:142.1953125,min:137.5625,mean:138.707421875},cpu:{max:60.48572130986353,min:34.594808303176436,mean:50.88592625565946}}},poolOverflow:80,upstreamConnections:197,counters:{"benchmark.http_2xx":{value:287920,perSecond:3199.1111111111113},"benchmark.pool_overflow":{value:80,perSecond:.8888888888888888},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:197,perSecond:2.188888888888889},upstream_cx_rx_bytes_total:{value:45203440,perSecond:502260.44444444444},upstream_cx_total:{value:197,perSecond:2.188888888888889},upstream_cx_tx_bytes_total:{value:12956400,perSecond:143960},upstream_rq_pending_overflow:{value:80,perSecond:.8888888888888888},upstream_rq_pending_total:{value:197,perSecond:2.188888888888889},upstream_rq_total:{value:287920,perSecond:3199.1111111111113}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:2022,totalRequests:179958,latency:{max:21.025790999999998,min:.248144,mean:.366898,pstdev:.15592,percentiles:{p50:.355983,p75:.371327,p80:.375567,p90:.38636699999999996,p95:.408463,p99:.794591,p999:2.145023}},resources:{envoyGateway:{memory:{max:163.04296875,min:146.859375,mean:150.65572916666667},cpu:{max:1.000000000000038,min:.933333333333337,mean:.9787878787878627}},envoyProxy:{memory:{max:137.84765625,min:136.77734375,mean:137.0859375},cpu:{max:39.49899838449119,min:39.465970330002804,mean:39.49074137086909}}},poolOverflow:42,upstreamConnections:19,counters:{"benchmark.http_2xx":{value:179958,perSecond:2022},"benchmark.pool_overflow":{value:42,perSecond:.47191011235955055},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:19,perSecond:.21348314606741572},upstream_cx_rx_bytes_total:{value:28253406,perSecond:317454},upstream_cx_total:{value:19,perSecond:.21348314606741572},upstream_cx_tx_bytes_total:{value:8098110,perSecond:90990},upstream_rq_pending_overflow:{value:42,perSecond:.47191011235955055},upstream_rq_pending_total:{value:19,perSecond:.21348314606741572},upstream_rq_total:{value:179958,perSecond:2022}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1213.3033707865168,totalRequests:107984,latency:{max:25.883647,min:.25404,mean:.371704,pstdev:.24943300000000002,percentiles:{p50:.358335,p75:.370575,p80:.373935,p90:.384879,p95:.40491099999999997,p99:.710335,p999:2.654719}},resources:{envoyGateway:{memory:{max:149.109375,min:142.48046875,mean:145.869921875},cpu:{max:1.066666666666644,min:.933333333333337,mean:.9749999999999859}},envoyProxy:{memory:{max:136.78515625,min:136.7421875,mean:136.769140625},cpu:{max:24.220989802525185,min:24.20874876604165,mean:24.214869284283417}}},poolOverflow:16,upstreamConnections:20,counters:{"benchmark.http_2xx":{value:107984,perSecond:1213.3033707865168},"benchmark.pool_overflow":{value:16,perSecond:.1797752808988764},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:20,perSecond:.2247191011235955},upstream_cx_rx_bytes_total:{value:16953488,perSecond:190488.62921348316},upstream_cx_total:{value:20,perSecond:.2247191011235955},upstream_cx_tx_bytes_total:{value:4859280,perSecond:54598.651685393255},upstream_rq_pending_overflow:{value:16,perSecond:.1797752808988764},upstream_rq_pending_total:{value:20,perSecond:.2247191011235955},upstream_rq_total:{value:107984,perSecond:1213.3033707865168}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:400,totalRequests:36e3,latency:{max:18.101247,min:.295056,mean:.396895,pstdev:.25685399999999997,percentiles:{p50:.37620699999999996,p75:.39150300000000005,p80:.396223,p90:.413279,p95:.437551,p99:.816063,p999:3.681919}},resources:{envoyGateway:{memory:{max:148.10546875,min:140.08203125,mean:143.51692708333334},cpu:{max:1.1333333333333446,min:.8666666666666363,mean:1.0095238095238068}},envoyProxy:{memory:{max:138.34765625,min:136.5234375,mean:137.123046875},cpu:{max:8.597541519550166,min:6.052206989843309,mean:8.068733008098855}}},poolOverflow:0,upstreamConnections:7,counters:{"benchmark.http_2xx":{value:36e3,perSecond:400},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:7,perSecond:.07777777777777778},upstream_cx_rx_bytes_total:{value:5652e3,perSecond:62800},upstream_cx_total:{value:7,perSecond:.07777777777777778},upstream_cx_tx_bytes_total:{value:162e4,perSecond:18e3},upstream_rq_pending_total:{value:7,perSecond:.07777777777777778},upstream_rq_total:{value:36e3,perSecond:400}}}]},Hie={metadata:{version:"1.6.5",runId:"1.6.5-release-2026-03-13",date:"2026-03-13T02:12:48Z",environment:"GitHub Release",description:"Benchmark results for version 1.6.5 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.6.5/benchmark_report.zip",testConfiguration:{rps:100,connections:100,duration:90,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:404.4831460674157,totalRequests:35999,latency:{max:28.723199,min:.39584,mean:.53622,pstdev:.476311,percentiles:{p50:.494831,p75:.512095,p80:.517439,p90:.536639,p95:.580063,p99:1.403135,p999:6.899455}},resources:{envoyGateway:{memory:{max:138.1640625,min:122.62890625,mean:134.53190104166666},cpu:{max:1.0000000000000002,min:.3999999999999996,mean:.6000000000000002}},envoyProxy:{memory:{max:26.79296875,min:22.66796875,mean:25.896614583333335},cpu:{max:10.442485090963993,min:10.442485090963993,mean:10.442485090963993}}},poolOverflow:1,upstreamConnections:11,counters:{"benchmark.http_2xx":{value:35999,perSecond:404.4831460674157},"benchmark.pool_overflow":{value:1,perSecond:.011235955056179775},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:11,perSecond:.12359550561797752},upstream_cx_rx_bytes_total:{value:5651843,perSecond:63503.85393258427},upstream_cx_total:{value:11,perSecond:.12359550561797752},upstream_cx_tx_bytes_total:{value:1619955,perSecond:18201.74157303371},upstream_rq_pending_overflow:{value:1,perSecond:.011235955056179775},upstream_rq_pending_total:{value:11,perSecond:.12359550561797752},upstream_rq_total:{value:35999,perSecond:404.4831460674157}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1212.9325842696628,totalRequests:107951,latency:{max:40.710142999999995,min:.34687999999999997,mean:.521477,pstdev:.607942,percentiles:{p50:.47779099999999997,p75:.49417500000000003,p80:.49868700000000005,p90:.520239,p95:.570399,p99:1.353791,p999:8.105727}},resources:{envoyGateway:{memory:{max:148.19921875,min:138.01171875,mean:144.55247395833334},cpu:{max:2.066666666666667,min:.40000000000000036,mean:.8044444444444443}},envoyProxy:{memory:{max:33.01953125,min:26.8125,mean:31.680078125},cpu:{max:31.36975133214921,min:18.01566929840301,mean:26.704873468780946}}},poolOverflow:49,upstreamConnections:36,counters:{"benchmark.http_2xx":{value:107951,perSecond:1212.9325842696628},"benchmark.pool_overflow":{value:49,perSecond:.550561797752809},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:36,perSecond:.4044943820224719},upstream_cx_rx_bytes_total:{value:16948307,perSecond:190430.4157303371},upstream_cx_total:{value:36,perSecond:.4044943820224719},upstream_cx_tx_bytes_total:{value:4857795,perSecond:54581.96629213483},upstream_rq_pending_overflow:{value:49,perSecond:.550561797752809},upstream_rq_pending_total:{value:36,perSecond:.4044943820224719},upstream_rq_total:{value:107951,perSecond:1212.9325842696628}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:2020.6629213483145,totalRequests:179839,latency:{max:78.09843099999999,min:.34444800000000003,mean:.5169130000000001,pstdev:.690655,percentiles:{p50:.470895,p75:.48995099999999997,p80:.494351,p90:.518127,p95:.5935670000000001,p99:1.437823,p999:6.165503}},resources:{envoyGateway:{memory:{max:150.58984375,min:142.328125,mean:147.31705729166666},cpu:{max:2.8000000000000034,min:.5333333333333339,mean:.9666666666666673}},envoyProxy:{memory:{max:39.15625,min:36.890625,mean:37.129557291666664},cpu:{max:50.127887801494964,min:31.940523292577545,mean:47.198493725135904}}},poolOverflow:161,upstreamConnections:44,counters:{"benchmark.http_2xx":{value:179839,perSecond:2020.6629213483145},"benchmark.pool_overflow":{value:161,perSecond:1.8089887640449438},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:44,perSecond:.4943820224719101},upstream_cx_rx_bytes_total:{value:28234723,perSecond:317244.0786516854},upstream_cx_total:{value:44,perSecond:.4943820224719101},upstream_cx_tx_bytes_total:{value:8092755,perSecond:90929.83146067416},upstream_rq_pending_overflow:{value:161,perSecond:1.8089887640449438},upstream_rq_pending_total:{value:44,perSecond:.4943820224719101},upstream_rq_total:{value:179839,perSecond:2020.6629213483145}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3199.011111111111,totalRequests:287911,latency:{max:92.168191,min:.30192,mean:.9269270000000001,pstdev:3.663421,percentiles:{p50:.514383,p75:.613663,p80:.653407,p90:.843391,p95:1.150847,p99:7.916031,p999:59.416575}},resources:{envoyGateway:{memory:{max:155.2109375,min:150.078125,mean:153.849609375},cpu:{max:4.6000000000000085,min:.7999999999999948,mean:1.466666666666667}},envoyProxy:{memory:{max:68.71484375,min:59.22265625,mean:65.490234375},cpu:{max:77.80208344578179,min:77.80208344578179,mean:77.80208344578179}}},poolOverflow:89,upstreamConnections:203,counters:{"benchmark.http_2xx":{value:287911,perSecond:3199.011111111111},"benchmark.pool_overflow":{value:89,perSecond:.9888888888888889},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:203,perSecond:2.2555555555555555},upstream_cx_rx_bytes_total:{value:45202027,perSecond:502244.7444444444},upstream_cx_total:{value:203,perSecond:2.2555555555555555},upstream_cx_tx_bytes_total:{value:12955995,perSecond:143955.5},upstream_rq_pending_overflow:{value:89,perSecond:.9888888888888889},upstream_rq_pending_total:{value:203,perSecond:2.2555555555555555},upstream_rq_total:{value:287911,perSecond:3199.011111111111}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3999.211111111111,totalRequests:359929,latency:{max:184.549375,min:.27736,mean:2.461132,pstdev:10.065368999999999,percentiles:{p50:.570431,p75:.785471,p80:.858463,p90:1.5511030000000001,p95:4.246783,p99:66.826239,p999:101.093375}},resources:{envoyGateway:{memory:{max:172.86328125,min:162.59375,mean:168.85026041666666},cpu:{max:6.866666666666673,min:.7333333333333295,mean:1.9111111111111094}},envoyProxy:{memory:{max:97.9296875,min:88.1484375,mean:94.99869791666667},cpu:{max:92.92058106130418,min:48.84836610607844,mean:73.26369989227736}}},poolOverflow:70,upstreamConnections:330,counters:{"benchmark.http_2xx":{value:359929,perSecond:3999.211111111111},"benchmark.pool_overflow":{value:70,perSecond:.7777777777777778},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:330,perSecond:3.6666666666666665},upstream_cx_rx_bytes_total:{value:56508853,perSecond:627876.1444444444},upstream_cx_total:{value:330,perSecond:3.6666666666666665},upstream_cx_tx_bytes_total:{value:16196850,perSecond:179965},upstream_rq_pending_overflow:{value:70,perSecond:.7777777777777778},upstream_rq_pending_total:{value:330,perSecond:3.6666666666666665},upstream_rq_total:{value:359930,perSecond:3999.222222222222}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5479.355555555556,totalRequests:493142,latency:{max:225.689599,min:.33609599999999995,mean:37.651956,pstdev:34.037777,percentiles:{p50:21.173247,p75:67.024895,p80:72.24524699999999,p90:86.859775,p95:98.26303899999999,p99:118.054911,p999:167.845887}},resources:{envoyGateway:{memory:{max:198.2734375,min:188.02734375,mean:194.09921875},cpu:{max:15.53333333333332,min:.933333333333337,mean:3.202222222222225}},envoyProxy:{memory:{max:164.03125,min:152.83984375,mean:155.52122395833334},cpu:{max:99.97510441629572,min:99.86972027972055,mean:99.93038849522263}}},poolOverflow:184,upstreamConnections:216,counters:{"benchmark.http_2xx":{value:493142,perSecond:5479.355555555556},"benchmark.pool_overflow":{value:184,perSecond:2.0444444444444443},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:216,perSecond:2.4},upstream_cx_rx_bytes_total:{value:77423294,perSecond:860258.8222222222},upstream_cx_total:{value:216,perSecond:2.4},upstream_cx_tx_bytes_total:{value:22201110,perSecond:246679},upstream_rq_pending_overflow:{value:184,perSecond:2.0444444444444443},upstream_rq_pending_total:{value:216,perSecond:2.4},upstream_rq_total:{value:493358,perSecond:5481.7555555555555}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:4043.629213483146,totalRequests:359883,latency:{max:155.81183900000002,min:.292848,mean:2.017162,pstdev:8.171909999999999,percentiles:{p50:.5915509999999999,p75:.820703,p80:.9196789999999999,p90:1.597695,p95:3.339007,p99:54.988799,p999:90.357759}},resources:{envoyGateway:{memory:{max:212.12890625,min:168.421875,mean:183.72526041666666},cpu:{max:3.533333333333341,min:1.066666666666644,mean:1.680000000000007}},envoyProxy:{memory:{max:154.5078125,min:152.875,mean:153.92044270833333},cpu:{max:94.21263415152491,min:53.16742164449063,mean:87.0267242259528}}},poolOverflow:114,upstreamConnections:286,counters:{"benchmark.http_2xx":{value:359883,perSecond:4043.629213483146},"benchmark.pool_overflow":{value:114,perSecond:1.2808988764044944},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:286,perSecond:3.2134831460674156},upstream_cx_rx_bytes_total:{value:56501631,perSecond:634849.786516854},upstream_cx_total:{value:286,perSecond:3.2134831460674156},upstream_cx_tx_bytes_total:{value:16194870,perSecond:181964.83146067415},upstream_rq_pending_overflow:{value:114,perSecond:1.2808988764044944},upstream_rq_pending_total:{value:286,perSecond:3.2134831460674156},upstream_rq_total:{value:359886,perSecond:4043.6629213483147}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3198.0666666666666,totalRequests:287826,latency:{max:132.198399,min:.303344,mean:.91598,pstdev:3.57819,percentiles:{p50:.508191,p75:.608255,p80:.647199,p90:.8413109999999999,p95:1.133375,p99:8.679935,p999:54.564863}},resources:{envoyGateway:{memory:{max:171.65234375,min:160.578125,mean:163.03046875},cpu:{max:1.1333333333333446,min:1.066666666666644,mean:1.0811594202898598}},envoyProxy:{memory:{max:153.41796875,min:148.40625,mean:149.32838541666666},cpu:{max:77.81052772856602,min:46.823040725676336,mean:73.12420330057152}}},poolOverflow:174,upstreamConnections:184,counters:{"benchmark.http_2xx":{value:287826,perSecond:3198.0666666666666},"benchmark.pool_overflow":{value:174,perSecond:1.9333333333333333},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:184,perSecond:2.0444444444444443},upstream_cx_rx_bytes_total:{value:45188682,perSecond:502096.4666666667},upstream_cx_total:{value:184,perSecond:2.0444444444444443},upstream_cx_tx_bytes_total:{value:12952170,perSecond:143913},upstream_rq_pending_overflow:{value:174,perSecond:1.9333333333333333},upstream_rq_pending_total:{value:184,perSecond:2.0444444444444443},upstream_rq_total:{value:287826,perSecond:3198.0666666666666}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:1997.4888888888888,totalRequests:179774,latency:{max:99.303423,min:.35732800000000003,mean:.536752,pstdev:1.146692,percentiles:{p50:.473007,p75:.490287,p80:.493727,p90:.5159509999999999,p95:.605375,p99:1.730559,p999:7.974655}},resources:{envoyGateway:{memory:{max:164.15625,min:152.47265625,mean:155.97005208333334},cpu:{max:1.2000000000000455,min:1.0000000000000377,mean:1.0833333333333426}},envoyProxy:{memory:{max:149.203125,min:148.59765625,mean:148.73841145833333},cpu:{max:50.68842311583141,min:50.65819479910333,mean:50.68168741577659}}},poolOverflow:226,upstreamConnections:61,counters:{"benchmark.http_2xx":{value:179774,perSecond:1997.4888888888888},"benchmark.pool_overflow":{value:226,perSecond:2.511111111111111},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:61,perSecond:.6777777777777778},upstream_cx_rx_bytes_total:{value:28224518,perSecond:313605.7555555556},upstream_cx_total:{value:61,perSecond:.6777777777777778},upstream_cx_tx_bytes_total:{value:8089830,perSecond:89887},upstream_rq_pending_overflow:{value:226,perSecond:2.511111111111111},upstream_rq_pending_total:{value:61,perSecond:.6777777777777778},upstream_rq_total:{value:179774,perSecond:1997.4888888888888}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1199.4,totalRequests:107946,latency:{max:72.323071,min:.365152,mean:.52208,pstdev:.6794760000000001,percentiles:{p50:.47329499999999997,p75:.490239,p80:.494767,p90:.5165270000000001,p95:.563295,p99:1.440767,p999:8.894975}},resources:{envoyGateway:{memory:{max:156.05859375,min:144.6796875,mean:149.99635416666666},cpu:{max:1.1999999999999507,min:.933333333333337,mean:1.033333333333328}},envoyProxy:{memory:{max:148.77734375,min:148.56640625,mean:148.661328125},cpu:{max:30.93122336812199,min:17.72173064097516,mean:24.95206369864552}}},poolOverflow:54,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:107946,perSecond:1199.4},"benchmark.pool_overflow":{value:54,perSecond:.6},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:37,perSecond:.4111111111111111},upstream_cx_rx_bytes_total:{value:16947522,perSecond:188305.8},upstream_cx_total:{value:37,perSecond:.4111111111111111},upstream_cx_tx_bytes_total:{value:4857570,perSecond:53973},upstream_rq_pending_overflow:{value:54,perSecond:.6},upstream_rq_pending_total:{value:37,perSecond:.4111111111111111},upstream_rq_total:{value:107946,perSecond:1199.4}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:399.96666666666664,totalRequests:35997,latency:{max:35.893247,min:.395216,mean:.526502,pstdev:.442801,percentiles:{p50:.493535,p75:.510991,p80:.5156310000000001,p90:.531391,p95:.560223,p99:1.255679,p999:5.240063}},resources:{envoyGateway:{memory:{max:148.875,min:146.53125,mean:147.14166666666668},cpu:{max:1.1333333333333446,min:.933333333333337,mean:1.0305555555555694}},envoyProxy:{memory:{max:148.70703125,min:148.58203125,mean:148.61848958333334},cpu:{max:11.14762859633839,min:6.712358765475222,mean:9.116260686856515}}},poolOverflow:3,upstreamConnections:12,counters:{"benchmark.http_2xx":{value:35997,perSecond:399.96666666666664},"benchmark.pool_overflow":{value:3,perSecond:.03333333333333333},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:12,perSecond:.13333333333333333},upstream_cx_rx_bytes_total:{value:5651529,perSecond:62794.76666666667},upstream_cx_total:{value:12,perSecond:.13333333333333333},upstream_cx_tx_bytes_total:{value:1619865,perSecond:17998.5},upstream_rq_pending_overflow:{value:3,perSecond:.03333333333333333},upstream_rq_pending_total:{value:12,perSecond:.13333333333333333},upstream_rq_total:{value:35997,perSecond:399.96666666666664}}}]},Gie={metadata:{version:"1.6.4",runId:"1.6.4-release-2026-02-11",date:"2026-02-11T18:48:14Z",environment:"GitHub Release",description:"Benchmark results for version 1.6.4 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.6.4/benchmark_report.zip",testConfiguration:{rps:100,connections:100,duration:90,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:404.46067415730334,totalRequests:35997,latency:{max:11.386367,min:.35,mean:.46965,pstdev:.225788,percentiles:{p50:.442879,p75:.456559,p80:.461311,p90:.480175,p95:.520079,p99:1.130047,p999:3.363583}},resources:{envoyGateway:{memory:{max:135.9765625,min:123.1640625,mean:132.58528645833334},cpu:{max:.8,min:.33333333333333287,mean:.5222222222222221}},envoyProxy:{memory:{max:27.64453125,min:6.15234375,mean:23.934375},cpu:{max:9.529624248827844,min:5.990168017599307,mean:8.839583181101693}}},poolOverflow:3,upstreamConnections:7,counters:{"benchmark.http_2xx":{value:35997,perSecond:404.46067415730334},"benchmark.pool_overflow":{value:3,perSecond:.033707865168539325},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:7,perSecond:.07865168539325842},upstream_cx_rx_bytes_total:{value:5651529,perSecond:63500.32584269663},upstream_cx_total:{value:7,perSecond:.07865168539325842},upstream_cx_tx_bytes_total:{value:1619865,perSecond:18200.73033707865},upstream_rq_pending_overflow:{value:3,perSecond:.033707865168539325},upstream_rq_pending_total:{value:7,perSecond:.07865168539325842},upstream_rq_total:{value:35997,perSecond:404.46067415730334}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1199.4555555555555,totalRequests:107951,latency:{max:62.380031,min:.340896,mean:.470731,pstdev:.613115,percentiles:{p50:.43300700000000003,p75:.447071,p80:.451215,p90:.46831900000000004,p95:.5087349999999999,p99:1.202559,p999:5.438975}},resources:{envoyGateway:{memory:{max:145.69921875,min:136.0625,mean:142.76380208333333},cpu:{max:1.9333333333333333,min:.40000000000000036,mean:.7777777777777778}},envoyProxy:{memory:{max:33.57421875,min:29.44140625,mean:32.14075520833333},cpu:{max:28.238767669101605,min:16.703645871077857,mean:26.294669115997362}}},poolOverflow:49,upstreamConnections:26,counters:{"benchmark.http_2xx":{value:107951,perSecond:1199.4555555555555},"benchmark.pool_overflow":{value:49,perSecond:.5444444444444444},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:26,perSecond:.28888888888888886},upstream_cx_rx_bytes_total:{value:16948307,perSecond:188314.52222222224},upstream_cx_total:{value:26,perSecond:.28888888888888886},upstream_cx_tx_bytes_total:{value:4857795,perSecond:53975.5},upstream_rq_pending_overflow:{value:49,perSecond:.5444444444444444},upstream_rq_pending_total:{value:26,perSecond:.28888888888888886},upstream_rq_total:{value:107951,perSecond:1199.4555555555555}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:2021.2359550561798,totalRequests:179890,latency:{max:60.870655,min:.33552000000000004,mean:.471221,pstdev:.568649,percentiles:{p50:.435999,p75:.449839,p80:.454463,p90:.47441500000000003,p95:.524127,p99:1.221439,p999:4.652543}},resources:{envoyGateway:{memory:{max:151.2734375,min:138.15234375,mean:144.94466145833334},cpu:{max:2.4666666666666672,min:.4666666666666685,mean:.9777777777777779}},envoyProxy:{memory:{max:37.6328125,min:37.53515625,mean:37.585286458333336},cpu:{max:46.866473690981564,min:46.622352764535854,mean:46.82578686990728}}},poolOverflow:110,upstreamConnections:36,counters:{"benchmark.http_2xx":{value:179890,perSecond:2021.2359550561798},"benchmark.pool_overflow":{value:110,perSecond:1.2359550561797752},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:36,perSecond:.4044943820224719},upstream_cx_rx_bytes_total:{value:28242730,perSecond:317334.0449438202},upstream_cx_total:{value:36,perSecond:.4044943820224719},upstream_cx_tx_bytes_total:{value:8095050,perSecond:90955.61797752809},upstream_rq_pending_overflow:{value:110,perSecond:1.2359550561797752},upstream_rq_pending_total:{value:36,perSecond:.4044943820224719},upstream_rq_total:{value:179890,perSecond:2021.2359550561798}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3199.3444444444444,totalRequests:287941,latency:{max:148.733951,min:.31295999999999996,mean:.97614,pstdev:4.529151000000001,percentiles:{p50:.47313500000000003,p75:.554079,p80:.591647,p90:.764671,p95:1.004255,p99:13.700095,p999:68.681727}},resources:{envoyGateway:{memory:{max:152.23046875,min:145.31640625,mean:150.138671875},cpu:{max:4.666666666666662,min:.6666666666666643,mean:1.455555555555555}},envoyProxy:{memory:{max:71.12109375,min:61.76171875,mean:66.30546875},cpu:{max:74.6521586726646,min:73.32263545627377,mean:73.88321261511852}}},poolOverflow:59,upstreamConnections:256,counters:{"benchmark.http_2xx":{value:287941,perSecond:3199.3444444444444},"benchmark.pool_overflow":{value:59,perSecond:.6555555555555556},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:256,perSecond:2.8444444444444446},upstream_cx_rx_bytes_total:{value:45206737,perSecond:502297.0777777778},upstream_cx_total:{value:256,perSecond:2.8444444444444446},upstream_cx_tx_bytes_total:{value:12957345,perSecond:143970.5},upstream_rq_pending_overflow:{value:59,perSecond:.6555555555555556},upstream_rq_pending_total:{value:256,perSecond:2.8444444444444446},upstream_rq_total:{value:287941,perSecond:3199.3444444444444}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3993.5444444444443,totalRequests:359419,latency:{max:126.963711,min:.326976,mean:1.743744,pstdev:7.812901000000001,percentiles:{p50:.5075029999999999,p75:.622399,p80:.701055,p90:.975903,p95:2.395647,p99:52.015103,p999:89.567231}},resources:{envoyGateway:{memory:{max:162.53125,min:160.515625,mean:161.974609375},cpu:{max:6.933333333333351,min:.933333333333337,mean:1.9777777777777799}},envoyProxy:{memory:{max:95.48046875,min:90.8203125,mean:93.844140625},cpu:{max:91.90152781338112,min:51.79498024497793,mean:71.5604851909052}}},poolOverflow:224,upstreamConnections:176,counters:{"benchmark.http_2xx":{value:359419,perSecond:3993.5444444444443},"benchmark.pool_overflow":{value:224,perSecond:2.488888888888889},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:176,perSecond:1.9555555555555555},upstream_cx_rx_bytes_total:{value:56428783,perSecond:626986.4777777778},upstream_cx_total:{value:176,perSecond:1.9555555555555555},upstream_cx_tx_bytes_total:{value:16175970,perSecond:179733},upstream_rq_pending_overflow:{value:224,perSecond:2.488888888888889},upstream_rq_pending_total:{value:176,perSecond:1.9555555555555555},upstream_rq_total:{value:359466,perSecond:3994.0666666666666}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5014.222222222223,totalRequests:451280,latency:{max:276.578303,min:.3776,mean:51.310144,pstdev:37.19974,percentiles:{p50:59.969535,p75:81.895423,p80:86.302719,p90:97.402879,p95:104.501247,p99:130.023423,p999:194.633727}},resources:{envoyGateway:{memory:{max:191.44140625,min:179.79296875,mean:185.4},cpu:{max:13.333333333333334,min:.8666666666667312,mean:3.011111111111104}},envoyProxy:{memory:{max:153.73828125,min:147.21484375,mean:151.28802083333332},cpu:{max:100.07782742565323,min:66.06429997077066,mean:91.7528157677912}}},poolOverflow:134,upstreamConnections:266,counters:{"benchmark.http_2xx":{value:451280,perSecond:5014.222222222223},"benchmark.pool_overflow":{value:134,perSecond:1.488888888888889},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:266,perSecond:2.9555555555555557},upstream_cx_rx_bytes_total:{value:70850960,perSecond:787232.8888888889},upstream_cx_total:{value:266,perSecond:2.9555555555555557},upstream_cx_tx_bytes_total:{value:20316195,perSecond:225735.5},upstream_rq_pending_overflow:{value:134,perSecond:1.488888888888889},upstream_rq_pending_total:{value:266,perSecond:2.9555555555555557},upstream_rq_total:{value:451471,perSecond:5016.344444444445}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3999.2555555555555,totalRequests:359933,latency:{max:254.033919,min:.267488,mean:2.765009,pstdev:12.463928000000001,percentiles:{p50:.5370550000000001,p75:.7140789999999999,p80:.7666869999999999,p90:1.1643510000000001,p95:3.600639,p99:78.381055,p999:138.592255}},resources:{envoyGateway:{memory:{max:193.22265625,min:169.76171875,mean:174.6515625},cpu:{max:1.1997600479904476,min:1.066666666666644,mean:1.1083277966664442}},envoyProxy:{memory:{max:153.9453125,min:152.50390625,mean:153.59830729166666},cpu:{max:90.6643189111433,min:48.332151206771016,mean:72.5650898137253}}},poolOverflow:67,upstreamConnections:333,counters:{"benchmark.http_2xx":{value:359933,perSecond:3999.2555555555555},"benchmark.pool_overflow":{value:67,perSecond:.7444444444444445},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:333,perSecond:3.7},upstream_cx_rx_bytes_total:{value:56509481,perSecond:627883.1222222223},upstream_cx_total:{value:333,perSecond:3.7},upstream_cx_tx_bytes_total:{value:16196985,perSecond:179966.5},upstream_rq_pending_overflow:{value:67,perSecond:.7444444444444445},upstream_rq_pending_total:{value:333,perSecond:3.7},upstream_rq_total:{value:359933,perSecond:3999.2555555555555}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3198.9555555555557,totalRequests:287906,latency:{max:124.383231,min:.312,mean:.91919,pstdev:3.678308,percentiles:{p50:.509023,p75:.601823,p80:.643743,p90:.834751,p95:1.167167,p99:8.297727,p999:58.734591}},resources:{envoyGateway:{memory:{max:184.0546875,min:155.8671875,mean:166.537109375},cpu:{max:1.2666666666666515,min:.9999999999999432,mean:1.1272727272727225}},envoyProxy:{memory:{max:153.81640625,min:148.70703125,mean:149.38411458333334},cpu:{max:74.81835549167545,min:70.37882085331354,mean:72.42984265413129}}},poolOverflow:94,upstreamConnections:188,counters:{"benchmark.http_2xx":{value:287906,perSecond:3198.9555555555557},"benchmark.pool_overflow":{value:94,perSecond:1.0444444444444445},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:188,perSecond:2.088888888888889},upstream_cx_rx_bytes_total:{value:45201242,perSecond:502236.02222222224},upstream_cx_total:{value:188,perSecond:2.088888888888889},upstream_cx_tx_bytes_total:{value:12955770,perSecond:143953},upstream_rq_pending_overflow:{value:94,perSecond:1.0444444444444445},upstream_rq_pending_total:{value:188,perSecond:2.088888888888889},upstream_rq_total:{value:287906,perSecond:3198.9555555555557}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:2021.112359550562,totalRequests:179879,latency:{max:75.083775,min:.332592,mean:.471157,pstdev:.623542,percentiles:{p50:.432367,p75:.447295,p80:.45182300000000003,p90:.468383,p95:.512367,p99:1.296831,p999:4.564223}},resources:{envoyGateway:{memory:{max:163.9921875,min:151.484375,mean:153.562109375},cpu:{max:1.1333333333333446,min:.9999999999999432,mean:1.0416666666666703}},envoyProxy:{memory:{max:149.2265625,min:148.9765625,mean:149.03190104166666},cpu:{max:47.40828974480921,min:33.23458396978556,mean:45.411667373423406}}},poolOverflow:121,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:179879,perSecond:2021.112359550562},"benchmark.pool_overflow":{value:121,perSecond:1.3595505617977528},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:38,perSecond:.42696629213483145},upstream_cx_rx_bytes_total:{value:28241003,perSecond:317314.6404494382},upstream_cx_total:{value:38,perSecond:.42696629213483145},upstream_cx_tx_bytes_total:{value:8094555,perSecond:90950.05617977527},upstream_rq_pending_overflow:{value:121,perSecond:1.3595505617977528},upstream_rq_pending_total:{value:38,perSecond:.42696629213483145},upstream_rq_total:{value:179879,perSecond:2021.112359550562}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1212.8426966292134,totalRequests:107943,latency:{max:71.524351,min:.35416000000000003,mean:.475783,pstdev:.648528,percentiles:{p50:.438783,p75:.455471,p80:.460527,p90:.478863,p95:.520927,p99:1.179327,p999:4.997887}},resources:{envoyGateway:{memory:{max:153.9140625,min:149.5703125,mean:150.66848958333333},cpu:{max:1.2000000000000457,min:.9999999999999433,mean:1.095238095238087}},envoyProxy:{memory:{max:149.0078125,min:147.71484375,mean:148.062890625},cpu:{max:29.494176952217742,min:29.494176952217742,mean:29.494176952217742}}},poolOverflow:57,upstreamConnections:27,counters:{"benchmark.http_2xx":{value:107943,perSecond:1212.8426966292134},"benchmark.pool_overflow":{value:57,perSecond:.6404494382022472},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:27,perSecond:.30337078651685395},upstream_cx_rx_bytes_total:{value:16947051,perSecond:190416.3033707865},upstream_cx_total:{value:27,perSecond:.30337078651685395},upstream_cx_tx_bytes_total:{value:4857435,perSecond:54577.92134831461},upstream_rq_pending_overflow:{value:57,perSecond:.6404494382022472},upstream_rq_pending_total:{value:27,perSecond:.30337078651685395},upstream_rq_total:{value:107943,perSecond:1212.8426966292134}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:399.9222222222222,totalRequests:35993,latency:{max:57.382911,min:.35481599999999996,mean:.4928620000000001,pstdev:.7162310000000001,percentiles:{p50:.450783,p75:.470527,p80:.479391,p90:.512191,p95:.562975,p99:1.138623,p999:5.999103}},resources:{envoyGateway:{memory:{max:152.5078125,min:144.46484375,mean:146.828515625},cpu:{max:1.2000000000000457,min:.933333333333337,mean:1.0724637681159428}},envoyProxy:{memory:{max:147.734375,min:147.44921875,mean:147.50325520833334},cpu:{max:10.827605653415667,min:10.123649291472635,mean:10.546023108638455}}},poolOverflow:7,upstreamConnections:14,counters:{"benchmark.http_2xx":{value:35993,perSecond:399.9222222222222},"benchmark.pool_overflow":{value:7,perSecond:.07777777777777778},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:14,perSecond:.15555555555555556},upstream_cx_rx_bytes_total:{value:5650901,perSecond:62787.78888888889},upstream_cx_total:{value:14,perSecond:.15555555555555556},upstream_cx_tx_bytes_total:{value:1619685,perSecond:17996.5},upstream_rq_pending_overflow:{value:7,perSecond:.07777777777777778},upstream_rq_pending_total:{value:14,perSecond:.15555555555555556},upstream_rq_total:{value:35993,perSecond:399.9222222222222}}}]},Bie={metadata:{version:"1.6.1",runId:"1.6.1-1765931812524",date:"2025-12-17T00:36:52.524Z",environment:"GitHub CI",description:"Benchmark results for version 1.6.1",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5304.85,totalRequests:159146,latency:{min:.376,mean:6.595,max:70.885,pstdev:11.48,percentiles:{p50:3.196,p75:5.135,p80:5.825,p90:9.106,p95:45.002,p99:53.958,p999:58.937}},resources:{envoyGateway:{memory:{min:121.21,max:137.21,mean:133.6},cpu:{min:.27,max:1.07,mean:.45}},envoyProxy:{memory:{min:5.99,max:27.8,mean:26.65},cpu:{min:0,max:100,mean:7.14}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:159146,perSecond:5304.85},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24985922,perSecond:832861.45},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7163235,perSecond:238773.75},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:159183,perSecond:5306.08}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5315.3,totalRequests:159459,latency:{min:.394,mean:6.608,max:78.028,pstdev:11.984,percentiles:{p50:3.11,p75:4.873,p80:5.487,p90:8.302,p95:47.81,p99:54.222,p999:59.463}},resources:{envoyGateway:{memory:{min:137.2,max:147.08,mean:142.14},cpu:{min:.27,max:1.93,mean:.63}},envoyProxy:{memory:{min:29.66,max:33.89,mean:33.5},cpu:{min:0,max:97.78,mean:9.59}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:159459,perSecond:5315.3},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:25035063,perSecond:834501.78},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7177320,perSecond:239243.91},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:159496,perSecond:5316.53}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5283.74,totalRequests:158514,latency:{min:.378,mean:6.628,max:93.491,pstdev:11.944,percentiles:{p50:3.137,p75:5.002,p80:5.624,p90:8.369,p95:47.605,p99:53.665,p999:58.869}},resources:{envoyGateway:{memory:{min:140.7,max:151.43,mean:145.16},cpu:{min:.4,max:2.67,mean:.76}},envoyProxy:{memory:{min:37.73,max:40.02,mean:39.47},cpu:{min:0,max:25.9,mean:.59}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:158514,perSecond:5283.74},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24886698,perSecond:829546.43},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7134615,perSecond:237817.59},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:158547,perSecond:5284.84}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5204.25,totalRequests:156128,latency:{min:.373,mean:6.726,max:91.82,pstdev:12.218,percentiles:{p50:3.131,p75:4.96,p80:5.612,p90:8.593,p95:47.857,p99:54.527,p999:63.778}},resources:{envoyGateway:{memory:{min:147.88,max:153.92,mean:151.47},cpu:{min:.47,max:4.73,mean:1.07}},envoyProxy:{memory:{min:62.02,max:62.22,mean:62.08},cpu:{min:0,max:45.07,mean:1.13}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:156128,perSecond:5204.25},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24512096,perSecond:817067.71},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7027425,perSecond:234246.88},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:156165,perSecond:5205.49}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5194.25,totalRequests:155829,latency:{min:.383,mean:6.935,max:79.613,pstdev:12.512,percentiles:{p50:3.204,p75:5.117,p80:5.808,p90:8.937,p95:48.531,p99:55.611,p999:67.059}},resources:{envoyGateway:{memory:{min:157.16,max:172.57,mean:168.57},cpu:{min:.53,max:7.2,mean:1.47}},envoyProxy:{memory:{min:84.09,max:86.29,mean:86.04},cpu:{min:0,max:100.05,mean:12.87}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:155829,perSecond:5194.25},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24465153,perSecond:815496.96},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7013565,perSecond:233783.17},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:155857,perSecond:5195.18}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5115.06,totalRequests:153454,latency:{min:.393,mean:7.085,max:109.756,pstdev:12.95,percentiles:{p50:3.195,p75:5.039,p80:5.692,p90:8.994,p95:49.426,p99:58.23,p999:70.422}},resources:{envoyGateway:{memory:{min:173.94,max:196.39,mean:190.77},cpu:{min:.6,max:13.93,mean:1.97}},envoyProxy:{memory:{min:140.53,max:140.7,mean:140.57},cpu:{min:0,max:5.67,mean:1.57}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:153454,perSecond:5115.06},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24092278,perSecond:803064.79},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6906420,perSecond:230210.81},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:153476,perSecond:5115.8}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5338.31,totalRequests:160153,latency:{min:.379,mean:6.782,max:75.825,pstdev:11.999,percentiles:{p50:3.274,p75:5.094,p80:5.709,p90:8.727,p95:47.667,p99:54.355,p999:59.471}},resources:{envoyGateway:{memory:{min:145.52,max:147.96,mean:146.23},cpu:{min:0,max:1.07,mean:.75}},envoyProxy:{memory:{min:138.12,max:138.57,mean:138.22},cpu:{min:0,max:100.01,mean:9.46}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:160153,perSecond:5338.31},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25144021,perSecond:838114.93},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7207920,perSecond:240258.52},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:160176,perSecond:5339.08}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5292.35,totalRequests:158769,latency:{min:.379,mean:6.68,max:76.271,pstdev:12.093,percentiles:{p50:3.116,p75:4.881,p80:5.514,p90:8.447,p95:48.091,p99:54.738,p999:61.007}},resources:{envoyGateway:{memory:{min:141.33,max:151.66,mean:147.23},cpu:{min:0,max:1.2,mean:.71}},envoyProxy:{memory:{min:138.14,max:138.32,mean:138.19},cpu:{min:0,max:99.95,mean:4.5}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:158769,perSecond:5292.35},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24926733,perSecond:830898.42},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7145865,perSecond:238197.6},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:158797,perSecond:5293.28}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5353.39,totalRequests:160607,latency:{min:.379,mean:7.767,max:94.674,pstdev:12.965,percentiles:{p50:3.649,p75:5.985,p80:6.804,p90:11.396,p95:49.006,p99:55.625,p999:63.916}},resources:{envoyGateway:{memory:{min:146.41,max:158.55,mean:150.46},cpu:{min:0,max:1.2,mean:.75}},envoyProxy:{memory:{min:138.3,max:138.52,mean:138.36},cpu:{min:0,max:100.2,mean:9.9}}},poolOverflow:356,upstreamConnections:44,counters:{"benchmark.http_2xx":{value:160607,perSecond:5353.39},"benchmark.pool_overflow":{value:356,perSecond:11.87},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:44,perSecond:1.47},upstream_cx_rx_bytes_total:{value:25215299,perSecond:840482.78},upstream_cx_total:{value:44,perSecond:1.47},upstream_cx_tx_bytes_total:{value:7228575,perSecond:240944.71},upstream_rq_pending_overflow:{value:356,perSecond:11.87},upstream_rq_pending_total:{value:44,perSecond:1.47},upstream_rq_total:{value:160635,perSecond:5354.33}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5251.66,totalRequests:157550,latency:{min:.362,mean:6.85,max:102.064,pstdev:12.185,percentiles:{p50:3.19,p75:5.111,p80:5.817,p90:9.126,p95:47.685,p99:54.695,p999:63.205}},resources:{envoyGateway:{memory:{min:158.54,max:168.72,mean:160.6},cpu:{min:0,max:1.2,mean:.73}},envoyProxy:{memory:{min:138.3,max:140.56,mean:138.63},cpu:{min:0,max:99.87,mean:4.61}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:157550,perSecond:5251.66},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24735350,perSecond:824510.95},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7091460,perSecond:236381.79},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:157588,perSecond:5252.93}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5226.15,totalRequests:156791,latency:{min:.367,mean:6.93,max:87.855,pstdev:12.538,percentiles:{p50:3.176,p75:5.094,p80:5.78,p90:9.033,p95:48.709,p99:55.67,p999:65.673}},resources:{envoyGateway:{memory:{min:167.79,max:196.18,mean:171.16},cpu:{min:0,max:1.13,mean:.74}},envoyProxy:{memory:{min:140.56,max:149.79,mean:141.48},cpu:{min:0,max:99.89,mean:9.34}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:156791,perSecond:5226.15},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24616187,perSecond:820506.23},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7056720,perSecond:235214.44},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:156816,perSecond:5226.99}}}]},Fie={metadata:{version:"1.6.0",runId:"1.6.0-1765940482907",date:"2025-12-17T03:01:22.907Z",environment:"GitHub CI",description:"Benchmark results for version 1.6.0",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5339.06,totalRequests:160172,latency:{min:.377,mean:6.73,max:89.411,pstdev:11.378,percentiles:{p50:3.326,p75:5.429,p80:6.219,p90:9.755,p95:43.753,p99:53.676,p999:58.869}},resources:{envoyGateway:{memory:{min:116.49,max:137.48,mean:136.01},cpu:{min:0,max:1.26,mean:.45}},envoyProxy:{memory:{min:4.3,max:27.61,mean:24.84},cpu:{min:0,max:99.91,mean:3.8}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:160172,perSecond:5339.06},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25147004,perSecond:838232.6},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7209450,perSecond:240314.75},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:160210,perSecond:5340.33}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5301.93,totalRequests:159058,latency:{min:.376,mean:6.607,max:73.531,pstdev:11.89,percentiles:{p50:3.156,p75:4.917,p80:5.531,p90:8.259,p95:47.218,p99:54.067,p999:59.246}},resources:{envoyGateway:{memory:{min:134.82,max:148.47,mean:145.25},cpu:{min:.33,max:2,mean:.62}},envoyProxy:{memory:{min:29.24,max:33.7,mean:32.86},cpu:{min:0,max:87.87,mean:5.11}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:159058,perSecond:5301.93},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24972106,perSecond:832402.72},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7159275,perSecond:238642.27},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:159095,perSecond:5303.16}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5336.06,totalRequests:160089,latency:{min:.384,mean:6.79,max:76.795,pstdev:12.17,percentiles:{p50:3.197,p75:5.026,p80:5.667,p90:8.665,p95:48.017,p99:54.579,p999:60.415}},resources:{envoyGateway:{memory:{min:138.84,max:147.74,mean:145.34},cpu:{min:.4,max:2.67,mean:.81}},envoyProxy:{memory:{min:37.31,max:39.85,mean:39.28},cpu:{min:0,max:99.98,mean:2.72}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:160089,perSecond:5336.06},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25133973,perSecond:837762.12},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7205040,perSecond:240157.4},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:160112,perSecond:5336.83}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5270.65,totalRequests:158120,latency:{min:.379,mean:6.688,max:80.261,pstdev:12.107,percentiles:{p50:3.16,p75:4.938,p80:5.551,p90:8.416,p95:47.781,p99:55.164,p999:61.943}},resources:{envoyGateway:{memory:{min:143.84,max:153.12,mean:152.05},cpu:{min:.47,max:4.8,mean:1.07}},envoyProxy:{memory:{min:59.5,max:61.68,mean:61.56},cpu:{min:0,max:100.02,mean:9.25}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:158120,perSecond:5270.65},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24824840,perSecond:827492.11},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7117065,perSecond:237234.77},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:158157,perSecond:5271.88}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5247.62,totalRequests:157429,latency:{min:.356,mean:6.872,max:81.539,pstdev:12.331,percentiles:{p50:3.228,p75:5.062,p80:5.705,p90:8.678,p95:48.199,p99:55.171,p999:65.744}},resources:{envoyGateway:{memory:{min:161.45,max:169.55,mean:166.8},cpu:{min:.6,max:6.87,mean:1.46}},envoyProxy:{memory:{min:81.71,max:86.02,mean:85.62},cpu:{min:0,max:99.81,mean:6.02}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:157429,perSecond:5247.62},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24716353,perSecond:823876.99},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7086015,perSecond:236200.09},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:157467,perSecond:5248.89}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5124.53,totalRequests:153737,latency:{min:.357,mean:7.041,max:88.129,pstdev:12.624,percentiles:{p50:3.241,p75:5.175,p80:5.882,p90:9.462,p95:47.947,p99:57.892,p999:69.079}},resources:{envoyGateway:{memory:{min:181.93,max:192.07,mean:188.87},cpu:{min:.6,max:12.67,mean:2.17}},envoyProxy:{memory:{min:140.27,max:140.47,mean:140.43},cpu:{min:0,max:99.81,mean:14.62}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:153737,perSecond:5124.53},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24136709,perSecond:804550.82},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6918750,perSecond:230623.24},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:153750,perSecond:5124.96}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5332.22,totalRequests:159967,latency:{min:.377,mean:6.769,max:68.108,pstdev:12.093,percentiles:{p50:3.195,p75:5.134,p80:5.793,p90:8.793,p95:47.841,p99:54.325,p999:59.437}},resources:{envoyGateway:{memory:{min:140.07,max:148.71,mean:144.23},cpu:{min:0,max:1.07,mean:.68}},envoyProxy:{memory:{min:135.8,max:135.99,mean:135.88},cpu:{min:0,max:37.96,mean:.81}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:159967,perSecond:5332.22},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25114819,perSecond:837157.78},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7200225,perSecond:240006.68},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:160005,perSecond:5333.48}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5360.96,totalRequests:160829,latency:{min:.385,mean:6.567,max:78.565,pstdev:12.02,percentiles:{p50:3.047,p75:4.812,p80:5.446,p90:8.291,p95:47.761,p99:54.624,p999:59.953}},resources:{envoyGateway:{memory:{min:143.64,max:152.11,mean:147.81},cpu:{min:0,max:1.2,mean:.76}},envoyProxy:{memory:{min:135.8,max:136.22,mean:135.88},cpu:{min:0,max:99.95,mean:4.35}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:160829,perSecond:5360.96},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:25250153,perSecond:841670.33},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7238970,perSecond:241298.59},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:160866,perSecond:5362.19}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5387.07,totalRequests:161620,latency:{min:.368,mean:6.902,max:91.717,pstdev:12.257,percentiles:{p50:3.235,p75:5.117,p80:5.779,p90:8.942,p95:48.25,p99:55.025,p999:61.599}},resources:{envoyGateway:{memory:{min:152.11,max:163.4,mean:154.49},cpu:{min:0,max:1.07,mean:.68}},envoyProxy:{memory:{min:135.81,max:136.21,mean:135.88},cpu:{min:0,max:.47,mean:.06}}},poolOverflow:361,upstreamConnections:39,counters:{"benchmark.http_2xx":{value:161620,perSecond:5387.07},"benchmark.pool_overflow":{value:361,perSecond:12.03},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:39,perSecond:1.3},upstream_cx_rx_bytes_total:{value:25374340,perSecond:845769.67},upstream_cx_total:{value:39,perSecond:1.3},upstream_cx_tx_bytes_total:{value:7274070,perSecond:242457.06},upstream_rq_pending_overflow:{value:361,perSecond:12.03},upstream_rq_pending_total:{value:39,perSecond:1.3},upstream_rq_total:{value:161646,perSecond:5387.93}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5326.66,totalRequests:159800,latency:{min:.381,mean:6.971,max:99.508,pstdev:12.521,percentiles:{p50:3.196,p75:5.124,p80:5.775,p90:9.183,p95:48.947,p99:55.918,p999:63.801}},resources:{envoyGateway:{memory:{min:156.4,max:175.45,mean:164.47},cpu:{min:0,max:1.27,mean:.76}},envoyProxy:{memory:{min:135.8,max:140.45,mean:136.18},cpu:{min:0,max:99.85,mean:9.76}}},poolOverflow:361,upstreamConnections:39,counters:{"benchmark.http_2xx":{value:159800,perSecond:5326.66},"benchmark.pool_overflow":{value:361,perSecond:12.03},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:39,perSecond:1.3},upstream_cx_rx_bytes_total:{value:25088600,perSecond:836285.42},upstream_cx_total:{value:39,perSecond:1.3},upstream_cx_tx_bytes_total:{value:7192755,perSecond:239758.14},upstream_rq_pending_overflow:{value:361,perSecond:12.03},upstream_rq_pending_total:{value:39,perSecond:1.3},upstream_rq_total:{value:159839,perSecond:5327.96}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5258.42,totalRequests:157753,latency:{min:.372,mean:6.861,max:98.947,pstdev:12.533,percentiles:{p50:3.083,p75:4.948,p80:5.617,p90:8.963,p95:48.871,p99:56.164,p999:66.125}},resources:{envoyGateway:{memory:{min:168.89,max:187.7,mean:172.5},cpu:{min:0,max:1.2,mean:.73}},envoyProxy:{memory:{min:140.43,max:140.85,mean:140.5},cpu:{min:0,max:91.32,mean:1.79}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:157753,perSecond:5258.42},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24767221,perSecond:825571.62},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7100595,perSecond:236685.81},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:157791,perSecond:5259.68}}}]},zie={metadata:{version:"1.5.5",runId:"1.5.5-1763692944638",date:"2025-11-21T02:42:24.638Z",environment:"GitHub CI",description:"Benchmark results for version 1.5.5",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5036.75,totalRequests:151111,latency:{min:.358,mean:6.858,max:73.158,pstdev:11.547,percentiles:{p50:3.378,p75:5.537,p80:6.339,p90:10.011,p95:45.465,p99:53.417,p999:58.159}},resources:{envoyGateway:{memory:{min:113.75,max:134.09,mean:130.21},cpu:{min:0,max:1.07,mean:.45}},envoyProxy:{memory:{min:0,max:28.17,mean:24.39},cpu:{min:0,max:99.13,mean:9.4}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:151111,perSecond:5036.75},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:23724427,perSecond:790770.25},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6801480,perSecond:226703.39},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:151144,perSecond:5037.85}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5111.15,totalRequests:153336,latency:{min:.402,mean:7.045,max:86.048,pstdev:12.225,percentiles:{p50:3.316,p75:5.416,p80:6.159,p90:9.64,p95:47.675,p99:54.513,p999:60.006}},resources:{envoyGateway:{memory:{min:134.09,max:140.93,mean:137.68},cpu:{min:.4,max:4.13,mean:.86}},envoyProxy:{memory:{min:27.99,max:32.19,mean:31.55},cpu:{min:0,max:.39,mean:.03}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:153336,perSecond:5111.15},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24073752,perSecond:802450.43},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6901650,perSecond:230052.72},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:153370,perSecond:5112.28}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5032,totalRequests:150960,latency:{min:.383,mean:6.985,max:85.159,pstdev:12.38,percentiles:{p50:3.242,p75:5.302,p80:6.026,p90:9.567,p95:48.363,p99:54.974,p999:61.327}},resources:{envoyGateway:{memory:{min:137.87,max:141.86,mean:139.55},cpu:{min:.4,max:5.2,mean:1.01}},envoyProxy:{memory:{min:32.05,max:38.38,mean:37.23},cpu:{min:0,max:.56,mean:.1}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:150960,perSecond:5032},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:23700720,perSecond:790023.81},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6794865,perSecond:226495.45},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:150997,perSecond:5033.23}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:4987.38,totalRequests:149622,latency:{min:.375,mean:6.978,max:144.031,pstdev:12.357,percentiles:{p50:3.327,p75:5.293,p80:5.983,p90:9.21,p95:47.702,p99:54.665,p999:65.447}},resources:{envoyGateway:{memory:{min:150.91,max:166.47,mean:154.26},cpu:{min:.47,max:14.47,mean:2.05}},envoyProxy:{memory:{min:38.27,max:60.52,mean:59.21},cpu:{min:0,max:99.83,mean:14.85}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:149622,perSecond:4987.38},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:23490654,perSecond:783019.07},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6734655,perSecond:224487.72},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:149659,perSecond:4988.62}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5054.22,totalRequests:151627,latency:{min:.38,mean:6.961,max:86.892,pstdev:12.306,percentiles:{p50:3.308,p75:5.212,p80:5.869,p90:9.026,p95:48.003,p99:54.798,p999:66.111}},resources:{envoyGateway:{memory:{min:154.38,max:165.47,mean:160.87},cpu:{min:.47,max:15.86,mean:2.17}},envoyProxy:{memory:{min:60.36,max:80.61,mean:78.16},cpu:{min:0,max:62.38,mean:1.78}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:151627,perSecond:5054.22},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:23805439,perSecond:793512.74},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6824880,perSecond:227495.46},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:151664,perSecond:5055.45}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:4876.52,totalRequests:146296,latency:{min:.389,mean:7.785,max:105.218,pstdev:13.242,percentiles:{p50:3.631,p75:5.918,p80:6.77,p90:11.637,p95:49.168,p99:58.429,p999:73.142}},resources:{envoyGateway:{memory:{min:174.48,max:189.18,mean:185.55},cpu:{min:.53,max:33.87,mean:3.98}},envoyProxy:{memory:{min:80.41,max:130.98,mean:125.04},cpu:{min:0,max:100.22,mean:10.6}}},poolOverflow:360,upstreamConnections:40,counters:{"benchmark.http_2xx":{value:146296,perSecond:4876.52},"benchmark.pool_overflow":{value:360,perSecond:12},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:40,perSecond:1.33},upstream_cx_rx_bytes_total:{value:22968472,perSecond:765614.39},upstream_cx_total:{value:40,perSecond:1.33},upstream_cx_tx_bytes_total:{value:6585120,perSecond:219503.61},upstream_rq_pending_overflow:{value:360,perSecond:12},upstream_rq_pending_total:{value:40,perSecond:1.33},upstream_rq_total:{value:146336,perSecond:4877.86}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5174,totalRequests:155220,latency:{min:.383,mean:6.982,max:84.951,pstdev:12.4,percentiles:{p50:3.264,p75:5.191,p80:5.851,p90:9.111,p95:48.539,p99:55.015,p999:61.159}},resources:{envoyGateway:{memory:{min:200.76,max:209.96,mean:204},cpu:{min:.67,max:3.2,mean:1}},envoyProxy:{memory:{min:124.56,max:124.95,mean:124.66},cpu:{min:0,max:100.02,mean:10.45}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:155220,perSecond:5174},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24369540,perSecond:812318.7},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6986610,perSecond:232887.2},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:155258,perSecond:5175.27}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5131.76,totalRequests:153955,latency:{min:.379,mean:7.003,max:69.431,pstdev:12.325,percentiles:{p50:3.309,p75:5.217,p80:5.892,p90:9.196,p95:48.388,p99:54.595,p999:59.465}},resources:{envoyGateway:{memory:{min:180.64,max:210.23,mean:203.47},cpu:{min:.67,max:4.47,mean:1.1}},envoyProxy:{memory:{min:124.54,max:124.73,mean:124.6},cpu:{min:0,max:100.06,mean:15.33}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:153955,perSecond:5131.76},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24170935,perSecond:805685.76},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6929505,perSecond:230980.04},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:153989,perSecond:5132.89}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5135.4,totalRequests:154068,latency:{min:.389,mean:6.84,max:90.39,pstdev:12.116,percentiles:{p50:3.218,p75:5.12,p80:5.774,p90:8.987,p95:47.542,p99:54.333,p999:60.504}},resources:{envoyGateway:{memory:{min:145.4,max:167.27,mean:150.39},cpu:{min:.67,max:9.6,mean:1.6}},envoyProxy:{memory:{min:124.55,max:132.84,mean:125.87},cpu:{min:0,max:35.79,mean:1.32}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:154068,perSecond:5135.4},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24188676,perSecond:806257.2},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6934455,perSecond:231139.33},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:154099,perSecond:5136.43}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:4805.71,totalRequests:144106,latency:{min:.355,mean:3.755,max:71.278,pstdev:8.613,percentiles:{p50:1.813,p75:2.693,p80:2.987,p90:4.022,p95:6.251,p99:48.558,p999:53.964}},resources:{envoyGateway:{memory:{min:158.2,max:168.5,mean:160.29},cpu:{min:.73,max:11,mean:1.76}},envoyProxy:{memory:{min:132.83,max:132.92,mean:132.86},cpu:{min:0,max:99.81,mean:5.92}}},poolOverflow:381,upstreamConnections:19,counters:{"benchmark.http_2xx":{value:144106,perSecond:4805.71},"benchmark.pool_overflow":{value:381,perSecond:12.71},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:19,perSecond:.63},upstream_cx_rx_bytes_total:{value:22624642,perSecond:754496.28},upstream_cx_total:{value:19,perSecond:.63},upstream_cx_tx_bytes_total:{value:6485625,perSecond:216285.41},upstream_rq_pending_overflow:{value:381,perSecond:12.71},upstream_rq_pending_total:{value:19,perSecond:.63},upstream_rq_total:{value:144125,perSecond:4806.34}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:4995.81,totalRequests:149876,latency:{min:.356,mean:6.955,max:102.629,pstdev:12.066,percentiles:{p50:3.365,p75:5.296,p80:5.991,p90:9.226,p95:46.753,p99:54.145,p999:65.548}},resources:{envoyGateway:{memory:{min:164.96,max:189.18,mean:168.91},cpu:{min:.47,max:22.33,mean:2.82}},envoyProxy:{memory:{min:130.84,max:133.12,mean:132.79},cpu:{min:0,max:99.83,mean:13.53}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:149876,perSecond:4995.81},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:23530532,perSecond:784342.88},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6746085,perSecond:224867.15},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:149913,perSecond:4997.05}}}]},Uie={metadata:{version:"1.5.4",runId:"1.5.4-1763692939320",date:"2025-11-21T02:42:19.320Z",environment:"GitHub CI",description:"Benchmark results for version 1.5.4",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5261.72,totalRequests:157854,latency:{min:.386,mean:6.996,max:92.798,pstdev:11.423,percentiles:{p50:3.467,p75:5.796,p80:6.627,p90:10.95,p95:42.975,p99:53.62,p999:61.476}},resources:{envoyGateway:{memory:{min:112.64,max:132.9,mean:127.62},cpu:{min:.13,max:1.13,mean:.44}},envoyProxy:{memory:{min:0,max:26.89,mean:22.19},cpu:{min:0,max:99.78,mean:11.73}}},poolOverflow:361,upstreamConnections:39,counters:{"benchmark.http_2xx":{value:157854,perSecond:5261.72},"benchmark.pool_overflow":{value:361,perSecond:12.03},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:39,perSecond:1.3},upstream_cx_rx_bytes_total:{value:24783078,perSecond:826090.43},upstream_cx_total:{value:39,perSecond:1.3},upstream_cx_tx_bytes_total:{value:7104105,perSecond:236800.01},upstream_rq_pending_overflow:{value:361,perSecond:12.03},upstream_rq_pending_total:{value:39,perSecond:1.3},upstream_rq_total:{value:157869,perSecond:5262.22}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5190.53,totalRequests:155722,latency:{min:.387,mean:6.792,max:87.822,pstdev:11.838,percentiles:{p50:3.189,p75:5.155,p80:5.868,p90:9.62,p95:45.627,p99:53.573,p999:62.234}},resources:{envoyGateway:{memory:{min:132.9,max:142.34,mean:138.63},cpu:{min:.27,max:4.4,mean:.84}},envoyProxy:{memory:{min:26.59,max:30.92,mean:30.2},cpu:{min:0,max:100.03,mean:11.03}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:155722,perSecond:5190.53},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24448354,perSecond:814913.58},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7008300,perSecond:233600.96},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:155740,perSecond:5191.13}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5212.86,totalRequests:156386,latency:{min:.374,mean:7.452,max:85.016,pstdev:12.613,percentiles:{p50:3.453,p75:5.808,p80:6.677,p90:11.296,p95:47.863,p99:55.584,p999:64.251}},resources:{envoyGateway:{memory:{min:136.62,max:139.78,mean:139},cpu:{min:.33,max:4.87,mean:.94}},envoyProxy:{memory:{min:30.65,max:37.21,mean:36.32},cpu:{min:0,max:46.44,mean:1.81}}},poolOverflow:359,upstreamConnections:41,counters:{"benchmark.http_2xx":{value:156386,perSecond:5212.86},"benchmark.pool_overflow":{value:359,perSecond:11.97},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:41,perSecond:1.37},upstream_cx_rx_bytes_total:{value:24552602,perSecond:818418.84},upstream_cx_total:{value:41,perSecond:1.37},upstream_cx_tx_bytes_total:{value:7039215,perSecond:234640.15},upstream_rq_pending_overflow:{value:359,perSecond:11.97},upstream_rq_pending_total:{value:41,perSecond:1.37},upstream_rq_total:{value:156427,perSecond:5214.23}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5198.93,totalRequests:155968,latency:{min:.381,mean:6.749,max:77.881,pstdev:11.891,percentiles:{p50:3.164,p75:5.134,p80:5.828,p90:9.403,p95:46.28,p99:54.018,p999:64.313}},resources:{envoyGateway:{memory:{min:139.78,max:155.04,mean:152.03},cpu:{min:.4,max:20.87,mean:2.55}},envoyProxy:{memory:{min:36.77,max:59.16,mean:55.93},cpu:{min:0,max:99.96,mean:4.33}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:155968,perSecond:5198.93},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24486976,perSecond:816232},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7020225,perSecond:234007.35},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:156005,perSecond:5200.16}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5176.03,totalRequests:155281,latency:{min:.387,mean:6.938,max:113.328,pstdev:12.104,percentiles:{p50:3.172,p75:5.303,p80:6.058,p90:10.265,p95:46.184,p99:54.487,p999:67.004}},resources:{envoyGateway:{memory:{min:151.23,max:165.62,mean:162.13},cpu:{min:.4,max:19.13,mean:2.41}},envoyProxy:{memory:{min:58.96,max:79.86,mean:77.36},cpu:{min:0,max:100.12,mean:7.47}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:155281,perSecond:5176.03},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24379117,perSecond:812636.63},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6989355,perSecond:232978.33},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:155319,perSecond:5177.3}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5137,totalRequests:154113,latency:{min:.359,mean:8.124,max:101.47,pstdev:13.23,percentiles:{p50:3.824,p75:6.312,p80:7.277,p90:13.76,p95:48.394,p99:58.728,p999:70.451}},resources:{envoyGateway:{memory:{min:189.07,max:235.64,mean:194.15},cpu:{min:.47,max:33.73,mean:5.63}},envoyProxy:{memory:{min:79.22,max:135.98,mean:130.13},cpu:{min:0,max:99.94,mean:11.21}}},poolOverflow:356,upstreamConnections:44,counters:{"benchmark.http_2xx":{value:154113,perSecond:5137},"benchmark.pool_overflow":{value:356,perSecond:11.87},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:44,perSecond:1.47},upstream_cx_rx_bytes_total:{value:24195741,perSecond:806508.95},upstream_cx_total:{value:44,perSecond:1.47},upstream_cx_tx_bytes_total:{value:6936390,perSecond:231208.49},upstream_rq_pending_overflow:{value:356,perSecond:11.87},upstream_rq_pending_total:{value:44,perSecond:1.47},upstream_rq_total:{value:154142,perSecond:5137.97}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5329.16,totalRequests:159878,latency:{min:.376,mean:6.806,max:98.381,pstdev:11.627,percentiles:{p50:3.31,p75:5.297,p80:6.029,p90:9.46,p95:45.32,p99:52.797,p999:59.246}},resources:{envoyGateway:{memory:{min:165.02,max:216.97,mean:203.73},cpu:{min:.6,max:3.13,mean:1.01}},envoyProxy:{memory:{min:128.97,max:129.21,mean:129.1},cpu:{min:0,max:52.71,mean:5.05}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:159878,perSecond:5329.16},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25100846,perSecond:836678.51},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7195860,perSecond:239857.31},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:159908,perSecond:5330.16}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5287.65,totalRequests:158634,latency:{min:.358,mean:7.578,max:118.231,pstdev:12.572,percentiles:{p50:3.603,p75:5.831,p80:6.664,p90:11.794,p95:47.65,p99:55.255,p999:65.124}},resources:{envoyGateway:{memory:{min:143.82,max:154.45,mean:146.42},cpu:{min:.6,max:4.47,mean:1.17}},envoyProxy:{memory:{min:128.95,max:129.23,mean:129.05},cpu:{min:0,max:100.12,mean:16.99}}},poolOverflow:358,upstreamConnections:42,counters:{"benchmark.http_2xx":{value:158634,perSecond:5287.65},"benchmark.pool_overflow":{value:358,perSecond:11.93},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:42,perSecond:1.4},upstream_cx_rx_bytes_total:{value:24905538,perSecond:830160.73},upstream_cx_total:{value:42,perSecond:1.4},upstream_cx_tx_bytes_total:{value:7139250,perSecond:237968.16},upstream_rq_pending_overflow:{value:358,perSecond:11.93},upstream_rq_pending_total:{value:42,perSecond:1.4},upstream_rq_total:{value:158650,perSecond:5288.18}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5182.59,totalRequests:155481,latency:{min:.39,mean:6.947,max:95.182,pstdev:11.994,percentiles:{p50:3.23,p75:5.374,p80:6.156,p90:10.277,p95:46.147,p99:53.874,p999:64.235}},resources:{envoyGateway:{memory:{min:144.34,max:159.4,mean:150.23},cpu:{min:.53,max:12.73,mean:1.84}},envoyProxy:{memory:{min:128.98,max:135.66,mean:129.5},cpu:{min:0,max:100,mean:14.54}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:155481,perSecond:5182.59},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24410517,perSecond:813667.08},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6998130,perSecond:233266.18},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:155514,perSecond:5183.69}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5243.55,totalRequests:157311,latency:{min:.377,mean:6.697,max:79.204,pstdev:11.447,percentiles:{p50:3.25,p75:5.266,p80:5.976,p90:9.577,p95:44.281,p99:52.84,p999:63.244}},resources:{envoyGateway:{memory:{min:149.68,max:165.16,mean:156.89},cpu:{min:.53,max:13.46,mean:2.24}},envoyProxy:{memory:{min:135.65,max:135.89,mean:135.73},cpu:{min:0,max:99.96,mean:14.81}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:157311,perSecond:5243.55},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24697827,perSecond:823237.67},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7080075,perSecond:235995.84},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:157335,perSecond:5244.35}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:4881.7,totalRequests:146451,latency:{min:.364,mean:5.04,max:106.377,pstdev:10.078,percentiles:{p50:2.332,p75:3.922,p80:4.464,p90:6.588,p95:31.911,p99:50.827,p999:62.269}},resources:{envoyGateway:{memory:{min:158.79,max:189.29,mean:167.36},cpu:{min:.53,max:37.46,mean:4.26}},envoyProxy:{memory:{min:135.64,max:136.08,mean:135.74},cpu:{min:0,max:98.66,mean:11.59}}},poolOverflow:374,upstreamConnections:26,counters:{"benchmark.http_2xx":{value:146451,perSecond:4881.7},"benchmark.pool_overflow":{value:374,perSecond:12.47},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:26,perSecond:.87},upstream_cx_rx_bytes_total:{value:22992807,perSecond:766426.81},upstream_cx_total:{value:26,perSecond:.87},upstream_cx_tx_bytes_total:{value:6591465,perSecond:219715.47},upstream_rq_pending_overflow:{value:374,perSecond:12.47},upstream_rq_pending_total:{value:26,perSecond:.87},upstream_rq_total:{value:146477,perSecond:4882.57}}}]},Wie={metadata:{version:"1.5.3",runId:"1.5.3-1763692934477",date:"2025-11-21T02:42:14.477Z",environment:"GitHub CI",description:"Benchmark results for version 1.5.3",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5307.12,totalRequests:159214,latency:{min:.355,mean:8.822,max:84.43,pstdev:13.817,percentiles:{p50:4.302,p75:7.114,p80:8.131,p90:15.852,p95:50.37,p99:56.598,p999:62.789}},resources:{envoyGateway:{memory:{min:108.98,max:135.71,mean:131.81},cpu:{min:.13,max:.93,mean:.44}},envoyProxy:{memory:{min:0,max:27.21,mean:22.38},cpu:{min:0,max:100.07,mean:7.4}}},poolOverflow:350,upstreamConnections:50,counters:{"benchmark.http_2xx":{value:159214,perSecond:5307.12},"benchmark.pool_overflow":{value:350,perSecond:11.67},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:50,perSecond:1.67},upstream_cx_rx_bytes_total:{value:24996598,perSecond:833217.57},upstream_cx_total:{value:50,perSecond:1.67},upstream_cx_tx_bytes_total:{value:7166880,perSecond:238895.32},upstream_rq_pending_overflow:{value:350,perSecond:11.67},upstream_rq_pending_total:{value:50,perSecond:1.67},upstream_rq_total:{value:159264,perSecond:5308.78}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5208.91,totalRequests:156270,latency:{min:.362,mean:6.755,max:82.063,pstdev:12.17,percentiles:{p50:3.138,p75:4.998,p80:5.665,p90:8.703,p95:48.013,p99:54.568,p999:60.248}},resources:{envoyGateway:{memory:{min:135.71,max:146.09,mean:142.6},cpu:{min:.33,max:3.93,mean:.8}},envoyProxy:{memory:{min:26.76,max:30.96,mean:30.48},cpu:{min:0,max:99.94,mean:4.65}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:156270,perSecond:5208.91},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24534390,perSecond:817799.54},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7033635,perSecond:234450.64},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:156303,perSecond:5210.01}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5217.66,totalRequests:156530,latency:{min:.386,mean:7.652,max:99.11,pstdev:13.119,percentiles:{p50:3.49,p75:5.773,p80:6.596,p90:11.249,p95:49.59,p99:56.573,p999:64.243}},resources:{envoyGateway:{memory:{min:141.46,max:152.33,mean:150.33},cpu:{min:.4,max:5.93,mean:1.05}},envoyProxy:{memory:{min:30.82,max:37.48,mean:36.09},cpu:{min:0,max:92.26,mean:1.94}}},poolOverflow:358,upstreamConnections:42,counters:{"benchmark.http_2xx":{value:156530,perSecond:5217.66},"benchmark.pool_overflow":{value:358,perSecond:11.93},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:42,perSecond:1.4},upstream_cx_rx_bytes_total:{value:24575210,perSecond:819172.58},upstream_cx_total:{value:42,perSecond:1.4},upstream_cx_tx_bytes_total:{value:7045740,perSecond:234857.69},upstream_rq_pending_overflow:{value:358,perSecond:11.93},upstream_rq_pending_total:{value:42,perSecond:1.4},upstream_rq_total:{value:156572,perSecond:5219.06}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5120.99,totalRequests:153632,latency:{min:.363,mean:7.027,max:92.614,pstdev:12.387,percentiles:{p50:3.32,p75:5.314,p80:6.018,p90:9.487,p95:48.113,p99:54.697,p999:63.485}},resources:{envoyGateway:{memory:{min:146.21,max:154.59,mean:152.49},cpu:{min:.4,max:22.79,mean:3.29}},envoyProxy:{memory:{min:36.96,max:59.15,mean:54.38},cpu:{min:0,max:1.28,mean:.03}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:153632,perSecond:5120.99},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24120224,perSecond:803994.95},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6915015,perSecond:230496.91},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:153667,perSecond:5122.15}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5080.76,totalRequests:152425,latency:{min:.375,mean:7.037,max:95.44,pstdev:12.408,percentiles:{p50:3.346,p75:5.267,p80:5.929,p90:9.267,p95:48.084,p99:55.326,p999:65.15}},resources:{envoyGateway:{memory:{min:152.76,max:168.61,mean:164.59},cpu:{min:.47,max:22.2,mean:2.76}},envoyProxy:{memory:{min:59.11,max:79.46,mean:77.33},cpu:{min:0,max:100.07,mean:8.55}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:152425,perSecond:5080.76},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:23930725,perSecond:797679.97},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6860790,perSecond:228689.89},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:152462,perSecond:5082}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5007.79,totalRequests:150239,latency:{min:.379,mean:7.327,max:121.139,pstdev:12.913,percentiles:{p50:3.33,p75:5.423,p80:6.152,p90:10.043,p95:48.586,p99:56.95,p999:69.328}},resources:{envoyGateway:{memory:{min:162.51,max:197.73,mean:192.58},cpu:{min:.47,max:54.6,mean:7.15}},envoyProxy:{memory:{min:99.33,max:135.09,mean:131.17},cpu:{min:0,max:47.18,mean:5.45}}},poolOverflow:361,upstreamConnections:39,counters:{"benchmark.http_2xx":{value:150239,perSecond:5007.79},"benchmark.pool_overflow":{value:361,perSecond:12.03},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:39,perSecond:1.3},upstream_cx_rx_bytes_total:{value:23587523,perSecond:786223.43},upstream_cx_total:{value:39,perSecond:1.3},upstream_cx_tx_bytes_total:{value:6761970,perSecond:225391.16},upstream_rq_pending_overflow:{value:361,perSecond:12.03},upstream_rq_pending_total:{value:39,perSecond:1.3},upstream_rq_total:{value:150266,perSecond:5008.69}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5202.6,totalRequests:156078,latency:{min:.396,mean:6.739,max:69.812,pstdev:12.158,percentiles:{p50:3.166,p75:5.022,p80:5.647,p90:8.593,p95:48.123,p99:54.417,p999:59.23}},resources:{envoyGateway:{memory:{min:137.63,max:148.54,mean:142.77},cpu:{min:.6,max:3.27,mean:.98}},envoyProxy:{memory:{min:121.41,max:121.58,mean:121.45},cpu:{min:0,max:98.16,mean:12.67}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:156078,perSecond:5202.6},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24504246,perSecond:816807.83},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7025175,perSecond:234172.39},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:156115,perSecond:5203.83}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5206.36,totalRequests:156191,latency:{min:.374,mean:6.733,max:75.362,pstdev:12.051,percentiles:{p50:3.238,p75:5.085,p80:5.693,p90:8.505,p95:48.011,p99:54.202,p999:59.555}},resources:{envoyGateway:{memory:{min:144.43,max:147.82,mean:145.9},cpu:{min:.6,max:4.27,mean:1.06}},envoyProxy:{memory:{min:121.41,max:121.54,mean:121.45},cpu:{min:0,max:96.17,mean:7.55}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:156191,perSecond:5206.36},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24521987,perSecond:817398.06},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7030260,perSecond:234341.57},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:156228,perSecond:5207.59}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5249.49,totalRequests:157487,latency:{min:.372,mean:6.913,max:72.269,pstdev:12.304,percentiles:{p50:3.269,p75:5.099,p80:5.722,p90:8.753,p95:48.592,p99:54.806,p999:61.022}},resources:{envoyGateway:{memory:{min:143.72,max:159.16,mean:149.43},cpu:{min:.6,max:13.4,mean:2.26}},envoyProxy:{memory:{min:121.41,max:135.12,mean:123.41},cpu:{min:0,max:100.04,mean:4.96}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:157487,perSecond:5249.49},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24725459,perSecond:824169.93},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7087770,perSecond:236255.55},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:157506,perSecond:5250.12}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5094.86,totalRequests:152846,latency:{min:.37,mean:6.845,max:83.345,pstdev:12.159,percentiles:{p50:3.146,p75:5.469,p80:6.243,p90:9.495,p95:47.437,p99:54.419,p999:64.133}},resources:{envoyGateway:{memory:{min:151.69,max:164.31,mean:158.32},cpu:{min:.67,max:14.33,mean:2.06}},envoyProxy:{memory:{min:135.06,max:135.27,mean:135.13},cpu:{min:0,max:83.56,mean:4.59}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:152846,perSecond:5094.86},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:23996822,perSecond:799893.07},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6879735,perSecond:229324.21},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:152883,perSecond:5096.09}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5119.62,totalRequests:153596,latency:{min:.38,mean:6.992,max:88.113,pstdev:12.19,percentiles:{p50:3.336,p75:5.257,p80:5.945,p90:9.203,p95:47.157,p99:54.669,p999:65.861}},resources:{envoyGateway:{memory:{min:162.61,max:197.09,mean:168.15},cpu:{min:.53,max:33.8,mean:3.91}},envoyProxy:{memory:{min:135.07,max:135.25,mean:135.12},cpu:{min:0,max:63.39,mean:1.52}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:153596,perSecond:5119.62},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24114572,perSecond:803779.88},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6913125,perSecond:230426.27},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:153625,perSecond:5120.58}}}]},Vie={metadata:{version:"1.5.2",runId:"1.5.2-1763692921166",date:"2025-11-21T02:42:01.166Z",environment:"GitHub CI",description:"Benchmark results for version 1.5.2",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5479.08,totalRequests:164373,latency:{min:.366,mean:6.532,max:64.706,pstdev:11.722,percentiles:{p50:3.191,p75:4.876,p80:5.443,p90:7.921,p95:46.766,p99:52.94,p999:57.231}},resources:{envoyGateway:{memory:{min:110.08,max:139.07,mean:132.64},cpu:{min:.2,max:.93,mean:.4}},envoyProxy:{memory:{min:0,max:28.59,mean:23.78},cpu:{min:0,max:99.89,mean:2.4}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:164373,perSecond:5479.08},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25806561,perSecond:860215.71},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7398495,perSecond:246615.64},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:164411,perSecond:5480.35}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5461.8,totalRequests:163860,latency:{min:.384,mean:7.323,max:82.927,pstdev:12.697,percentiles:{p50:3.499,p75:5.538,p80:6.239,p90:9.715,p95:49.223,p99:55.181,p999:60.008}},resources:{envoyGateway:{memory:{min:131.13,max:142.86,mean:141.65},cpu:{min:.27,max:3.87,mean:.86}},envoyProxy:{memory:{min:28.2,max:34.74,mean:33.02},cpu:{min:0,max:41.44,mean:1.79}}},poolOverflow:358,upstreamConnections:42,counters:{"benchmark.http_2xx":{value:163860,perSecond:5461.8},"benchmark.pool_overflow":{value:358,perSecond:11.93},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:42,perSecond:1.4},upstream_cx_rx_bytes_total:{value:25726020,perSecond:857502.4},upstream_cx_total:{value:42,perSecond:1.4},upstream_cx_tx_bytes_total:{value:7375050,perSecond:245825.94},upstream_rq_pending_overflow:{value:358,perSecond:11.93},upstream_rq_pending_total:{value:42,perSecond:1.4},upstream_rq_total:{value:163890,perSecond:5462.8}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5433.86,totalRequests:163016,latency:{min:.367,mean:6.464,max:72.536,pstdev:11.843,percentiles:{p50:3.031,p75:4.849,p80:5.481,p90:8.285,p95:47.396,p99:54.114,p999:59.86}},resources:{envoyGateway:{memory:{min:137.43,max:141.93,mean:140.64},cpu:{min:.33,max:5.67,mean:.99}},envoyProxy:{memory:{min:34.36,max:38.81,mean:38.03},cpu:{min:0,max:99.75,mean:9.06}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:163016,perSecond:5433.86},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:25593512,perSecond:853116.28},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7337385,perSecond:244579.28},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:163053,perSecond:5435.1}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5397.08,totalRequests:161912,latency:{min:.38,mean:6.525,max:93.134,pstdev:11.997,percentiles:{p50:3.053,p75:4.818,p80:5.4,p90:8.07,p95:47.677,p99:54.564,p999:64.092}},resources:{envoyGateway:{memory:{min:141.93,max:154.43,mean:152.12},cpu:{min:.4,max:19.33,mean:2.39}},envoyProxy:{memory:{min:38.43,max:60.61,mean:58.95},cpu:{min:0,max:92.48,mean:10.62}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:161912,perSecond:5397.08},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:25420184,perSecond:847341.13},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7287660,perSecond:242922.48},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:161948,perSecond:5398.28}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5346.58,totalRequests:160402,latency:{min:.373,mean:6.79,max:103.403,pstdev:12.301,percentiles:{p50:3.153,p75:4.996,p80:5.626,p90:8.574,p95:48.115,p99:55.238,p999:65.812}},resources:{envoyGateway:{memory:{min:154.42,max:166.59,mean:163.3},cpu:{min:.47,max:20.73,mean:2.56}},envoyProxy:{memory:{min:60.58,max:83.01,mean:80.07},cpu:{min:0,max:95.15,mean:8.57}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:160402,perSecond:5346.58},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25183114,perSecond:839413.75},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7219395,perSecond:240639.8},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:160431,perSecond:5347.55}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5218.06,totalRequests:156544,latency:{min:.367,mean:6.719,max:84.127,pstdev:12.353,percentiles:{p50:3.065,p75:4.893,p80:5.543,p90:8.557,p95:47.892,p99:56.375,p999:67.162}},resources:{envoyGateway:{memory:{min:161.57,max:194.59,mean:189.96},cpu:{min:.47,max:49.87,mean:5.41}},envoyProxy:{memory:{min:82.7,max:128.93,mean:125.62},cpu:{min:0,max:99.38,mean:16.19}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:156544,perSecond:5218.06},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24577408,perSecond:819234.78},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7045605,perSecond:234850.02},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:156569,perSecond:5218.89}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5387.19,totalRequests:161616,latency:{min:.364,mean:6.542,max:91.033,pstdev:12.047,percentiles:{p50:3.028,p75:4.823,p80:5.436,p90:8.323,p95:47.945,p99:54.667,p999:61.505}},resources:{envoyGateway:{memory:{min:196.85,max:204.68,mean:200.34},cpu:{min:.6,max:3.73,mean:1.01}},envoyProxy:{memory:{min:124.9,max:125.1,mean:124.96},cpu:{min:0,max:97.82,mean:1.97}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:161616,perSecond:5387.19},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:25373712,perSecond:845789.02},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7274385,perSecond:242479.1},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:161653,perSecond:5388.42}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5377.52,totalRequests:161329,latency:{min:.353,mean:6.666,max:69.062,pstdev:11.937,percentiles:{p50:3.235,p75:5.004,p80:5.575,p90:8.05,p95:47.345,p99:53.839,p999:59.277}},resources:{envoyGateway:{memory:{min:167.66,max:204.68,mean:198.45},cpu:{min:.6,max:5,mean:1.14}},envoyProxy:{memory:{min:124.91,max:126.91,mean:125.07},cpu:{min:0,max:99.99,mean:12.3}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:161329,perSecond:5377.52},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25328653,perSecond:844270.8},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7261290,perSecond:242037.94},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:161362,perSecond:5378.62}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5263.08,totalRequests:157896,latency:{min:.379,mean:7.049,max:80.699,pstdev:12.535,percentiles:{p50:3.279,p75:5.204,p80:5.879,p90:9.138,p95:48.818,p99:55.332,p999:61.927}},resources:{envoyGateway:{memory:{min:144,max:167.66,mean:149.36},cpu:{min:.67,max:12,mean:1.82}},envoyProxy:{memory:{min:126.91,max:134.89,mean:127.6},cpu:{min:0,max:68.16,mean:6.71}}},poolOverflow:361,upstreamConnections:39,counters:{"benchmark.http_2xx":{value:157896,perSecond:5263.08},"benchmark.pool_overflow":{value:361,perSecond:12.03},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:39,perSecond:1.3},upstream_cx_rx_bytes_total:{value:24789672,perSecond:826303.92},upstream_cx_total:{value:39,perSecond:1.3},upstream_cx_tx_bytes_total:{value:7106580,perSecond:236880.7},upstream_rq_pending_overflow:{value:361,perSecond:12.03},upstream_rq_pending_total:{value:39,perSecond:1.3},upstream_rq_total:{value:157924,perSecond:5264.02}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5316.8,totalRequests:159506,latency:{min:.359,mean:6.962,max:81.219,pstdev:12.393,percentiles:{p50:3.266,p75:5.154,p80:5.83,p90:8.94,p95:48.343,p99:55.275,p999:64.294}},resources:{envoyGateway:{memory:{min:157.35,max:161.75,mean:158.67},cpu:{min:.67,max:11.27,mean:2}},envoyProxy:{memory:{min:134.9,max:135.31,mean:135.02},cpu:{min:0,max:100.09,mean:13.37}}},poolOverflow:361,upstreamConnections:39,counters:{"benchmark.http_2xx":{value:159506,perSecond:5316.8},"benchmark.pool_overflow":{value:361,perSecond:12.03},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:39,perSecond:1.3},upstream_cx_rx_bytes_total:{value:25042442,perSecond:834736.89},upstream_cx_total:{value:39,perSecond:1.3},upstream_cx_tx_bytes_total:{value:7179075,perSecond:239299.3},upstream_rq_pending_overflow:{value:361,perSecond:12.03},upstream_rq_pending_total:{value:39,perSecond:1.3},upstream_rq_total:{value:159535,perSecond:5317.76}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5381.7,totalRequests:161451,latency:{min:.351,mean:6.541,max:88.997,pstdev:12.071,percentiles:{p50:3.074,p75:4.769,p80:5.326,p90:7.898,p95:47.615,p99:54.716,p999:65.511}},resources:{envoyGateway:{memory:{min:154.82,max:190.15,mean:165.17},cpu:{min:.53,max:33.2,mean:3.85}},envoyProxy:{memory:{min:128.91,max:135.08,mean:134.49},cpu:{min:0,max:99.98,mean:9.01}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:161451,perSecond:5381.7},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:25347807,perSecond:844926.36},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7266960,perSecond:242231.85},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:161488,perSecond:5382.93}}}]},Kie={metadata:{version:"1.5.0",runId:"1.5.0-1763692916136",date:"2025-11-21T02:41:56.136Z",environment:"GitHub CI",description:"Benchmark results for version 1.5.0",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5231,totalRequests:156932,latency:{min:.37,mean:7.156,max:72.495,pstdev:12.509,percentiles:{p50:3.426,p75:5.422,p80:6.073,p90:9.416,p95:48.619,p99:54.312,p999:58.814}},resources:{envoyGateway:{memory:{min:111.95,max:137.44,mean:132.26},cpu:{min:.13,max:1.13,mean:.45}},envoyProxy:{memory:{min:0,max:27.53,mean:21.99},cpu:{min:0,max:99.97,mean:7.47}}},poolOverflow:360,upstreamConnections:40,counters:{"benchmark.http_2xx":{value:156932,perSecond:5231},"benchmark.pool_overflow":{value:360,perSecond:12},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:40,perSecond:1.33},upstream_cx_rx_bytes_total:{value:24638324,perSecond:821267.28},upstream_cx_total:{value:40,perSecond:1.33},upstream_cx_tx_bytes_total:{value:7063470,perSecond:235446.08},upstream_rq_pending_overflow:{value:360,perSecond:12},upstream_rq_pending_total:{value:40,perSecond:1.33},upstream_rq_total:{value:156966,perSecond:5232.14}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5284.46,totalRequests:158534,latency:{min:.375,mean:7.325,max:70.68,pstdev:12.639,percentiles:{p50:3.504,p75:5.444,p80:6.115,p90:9.472,p95:48.904,p99:55.166,p999:60.913}},resources:{envoyGateway:{memory:{min:137.04,max:147.84,mean:140.78},cpu:{min:.33,max:4,mean:.81}},envoyProxy:{memory:{min:27.38,max:31.86,mean:31.1},cpu:{min:0,max:77.81,mean:4.21}}},poolOverflow:359,upstreamConnections:41,counters:{"benchmark.http_2xx":{value:158534,perSecond:5284.46},"benchmark.pool_overflow":{value:359,perSecond:11.97},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:41,perSecond:1.37},upstream_cx_rx_bytes_total:{value:24889838,perSecond:829660.38},upstream_cx_total:{value:41,perSecond:1.37},upstream_cx_tx_bytes_total:{value:7135875,perSecond:237862.25},upstream_rq_pending_overflow:{value:359,perSecond:11.97},upstream_rq_pending_total:{value:41,perSecond:1.37},upstream_rq_total:{value:158575,perSecond:5285.83}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5245.7,totalRequests:157371,latency:{min:.393,mean:7.594,max:95.199,pstdev:12.997,percentiles:{p50:3.589,p75:5.678,p80:6.423,p90:10.334,p95:49.883,p99:56.033,p999:61.966}},resources:{envoyGateway:{memory:{min:140.89,max:158.13,mean:147.17},cpu:{min:.33,max:5.13,mean:.98}},envoyProxy:{memory:{min:31.43,max:37.71,mean:37.04},cpu:{min:0,max:19.93,mean:1.95}}},poolOverflow:358,upstreamConnections:42,counters:{"benchmark.http_2xx":{value:157371,perSecond:5245.7},"benchmark.pool_overflow":{value:358,perSecond:11.93},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:42,perSecond:1.4},upstream_cx_rx_bytes_total:{value:24707247,perSecond:823574.27},upstream_cx_total:{value:42,perSecond:1.4},upstream_cx_tx_bytes_total:{value:7083585,perSecond:236119.32},upstream_rq_pending_overflow:{value:358,perSecond:11.93},upstream_rq_pending_total:{value:42,perSecond:1.4},upstream_rq_total:{value:157413,perSecond:5247.1}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5168.17,totalRequests:155048,latency:{min:.375,mean:6.991,max:103.972,pstdev:12.378,percentiles:{p50:3.286,p75:5.28,p80:5.974,p90:9.296,p95:48.189,p99:55.103,p999:64.542}},resources:{envoyGateway:{memory:{min:148.22,max:156.47,mean:153.66},cpu:{min:.47,max:16.07,mean:2.08}},envoyProxy:{memory:{min:37.69,max:60.02,mean:57.65},cpu:{min:0,max:99.73,mean:14.01}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:155048,perSecond:5168.17},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24342536,perSecond:811402.27},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6978780,perSecond:232621.53},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:155084,perSecond:5169.37}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5173.5,totalRequests:155210,latency:{min:.389,mean:6.827,max:83.619,pstdev:12.261,percentiles:{p50:3.164,p75:5.067,p80:5.727,p90:8.965,p95:48.003,p99:54.861,p999:64.55}},resources:{envoyGateway:{memory:{min:160.69,max:181.29,mean:168.42},cpu:{min:.4,max:14.73,mean:2.16}},envoyProxy:{memory:{min:59.88,max:80.35,mean:78.09},cpu:{min:0,max:100.13,mean:17.03}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:155210,perSecond:5173.5},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24367970,perSecond:812239.92},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6985665,perSecond:232848.12},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:155237,perSecond:5174.4}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:4954.6,totalRequests:148639,latency:{min:.362,mean:6.957,max:94.007,pstdev:12.255,percentiles:{p50:3.293,p75:5.279,p80:5.991,p90:9.369,p95:46.555,p99:55.103,p999:68.62}},resources:{envoyGateway:{memory:{min:182.77,max:198.76,mean:195.11},cpu:{min:.47,max:33.07,mean:4.47}},envoyProxy:{memory:{min:112.02,max:136.36,mean:133.37},cpu:{min:0,max:99.75,mean:7.96}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:148639,perSecond:4954.6},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:23336323,perSecond:777871.58},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6689475,perSecond:222980.82},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:148655,perSecond:4955.13}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5243.85,totalRequests:157319,latency:{min:.374,mean:7.087,max:80.916,pstdev:12.384,percentiles:{p50:3.347,p75:5.37,p80:6.082,p90:9.511,p95:48.24,p99:54.714,p999:60.506}},resources:{envoyGateway:{memory:{min:140.18,max:149.41,mean:143.1},cpu:{min:.67,max:3.27,mean:1}},envoyProxy:{memory:{min:127.76,max:127.94,mean:127.82},cpu:{min:0,max:99.8,mean:5.93}}},poolOverflow:361,upstreamConnections:39,counters:{"benchmark.http_2xx":{value:157319,perSecond:5243.85},"benchmark.pool_overflow":{value:361,perSecond:12.03},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:39,perSecond:1.3},upstream_cx_rx_bytes_total:{value:24699083,perSecond:823284.86},upstream_cx_total:{value:39,perSecond:1.3},upstream_cx_tx_bytes_total:{value:7080885,perSecond:236024.37},upstream_rq_pending_overflow:{value:361,perSecond:12.03},upstream_rq_pending_total:{value:39,perSecond:1.3},upstream_rq_total:{value:157353,perSecond:5244.99}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5233.21,totalRequests:157002,latency:{min:.378,mean:6.898,max:74.907,pstdev:12.301,percentiles:{p50:3.22,p75:5.159,p80:5.828,p90:9.039,p95:48.322,p99:54.702,p999:60.03}},resources:{envoyGateway:{memory:{min:145.41,max:151.13,mean:148.35},cpu:{min:.6,max:4.07,mean:1.07}},envoyProxy:{memory:{min:127.77,max:128.41,mean:127.86},cpu:{min:0,max:99.93,mean:8.94}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:157002,perSecond:5233.21},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24649314,perSecond:821613.48},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7066125,perSecond:235528.81},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:157025,perSecond:5233.97}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5193.37,totalRequests:155801,latency:{min:.356,mean:6.97,max:134.422,pstdev:12.396,percentiles:{p50:3.245,p75:5.229,p80:5.909,p90:9.186,p95:48.029,p99:55.148,p999:61.863}},resources:{envoyGateway:{memory:{min:146.94,max:160.41,mean:148.54},cpu:{min:.6,max:9.93,mean:1.66}},envoyProxy:{memory:{min:127.69,max:136.18,mean:127.97},cpu:{min:0,max:99.76,mean:19.75}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:155801,perSecond:5193.37},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24460757,perSecond:815358.63},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7012755,perSecond:233758.52},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:155839,perSecond:5194.63}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5202.79,totalRequests:156086,latency:{min:.363,mean:6.942,max:98.598,pstdev:12.536,percentiles:{p50:3.224,p75:5.05,p80:5.671,p90:8.706,p95:49.022,p99:55.58,p999:66.095}},resources:{envoyGateway:{memory:{min:154.45,max:171.48,mean:159.56},cpu:{min:.53,max:12.73,mean:1.91}},envoyProxy:{memory:{min:136.16,max:136.36,mean:136.23},cpu:{min:0,max:100.08,mean:15.35}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:156086,perSecond:5202.79},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24505502,perSecond:816837.99},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7024770,perSecond:234155.54},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:156106,perSecond:5203.46}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5146.66,totalRequests:154400,latency:{min:.379,mean:6.86,max:92.921,pstdev:12.588,percentiles:{p50:3.144,p75:4.942,p80:5.573,p90:8.615,p95:49.158,p99:56.338,p999:65.662}},resources:{envoyGateway:{memory:{min:161.58,max:194.96,mean:170.05},cpu:{min:.53,max:23.73,mean:2.99}},envoyProxy:{memory:{min:136.16,max:136.35,mean:136.22},cpu:{min:0,max:100.09,mean:6.89}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:154400,perSecond:5146.66},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24240800,perSecond:808025.55},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6949665,perSecond:231655.18},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:154437,perSecond:5147.89}}}]},Xie={metadata:{version:"1.4.5",runId:"1.4.5-1763692911330",date:"2025-11-21T02:41:51.330Z",environment:"GitHub CI",description:"Benchmark results for version 1.4.5",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5167.23,totalRequests:155019,latency:{min:.387,mean:7.145,max:169.533,pstdev:11.448,percentiles:{p50:3.498,p75:6.101,p80:7.038,p90:12.18,p95:43.442,p99:52.967,p999:59.131}},resources:{envoyGateway:{memory:{min:131.36,max:156.94,mean:150.91},cpu:{min:.13,max:.93,mean:.47}},envoyProxy:{memory:{min:0,max:27.57,mean:23.8},cpu:{min:0,max:99.86,mean:12.25}}},poolOverflow:360,upstreamConnections:40,counters:{"benchmark.http_2xx":{value:155019,perSecond:5167.23},"benchmark.pool_overflow":{value:360,perSecond:12},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:40,perSecond:1.33},upstream_cx_rx_bytes_total:{value:24337983,perSecond:811254.4},upstream_cx_total:{value:40,perSecond:1.33},upstream_cx_tx_bytes_total:{value:6977115,perSecond:232567.15},upstream_rq_pending_overflow:{value:360,perSecond:12},upstream_rq_pending_total:{value:40,perSecond:1.33},upstream_rq_total:{value:155047,perSecond:5168.16}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5091.12,totalRequests:152734,latency:{min:.325,mean:7.585,max:117.567,pstdev:12.356,percentiles:{p50:3.769,p75:6.053,p80:6.857,p90:11.38,p95:46.624,p99:54.2,p999:60.897}},resources:{envoyGateway:{memory:{min:155.46,max:163.91,mean:163.11},cpu:{min:.33,max:4.67,mean:.93}},envoyProxy:{memory:{min:27.08,max:33.45,mean:32.66},cpu:{min:0,max:99.81,mean:14.11}}},poolOverflow:359,upstreamConnections:41,counters:{"benchmark.http_2xx":{value:152734,perSecond:5091.12},"benchmark.pool_overflow":{value:359,perSecond:11.97},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:41,perSecond:1.37},upstream_cx_rx_bytes_total:{value:23979238,perSecond:799306.01},upstream_cx_total:{value:41,perSecond:1.37},upstream_cx_tx_bytes_total:{value:6874875,perSecond:229161.95},upstream_rq_pending_overflow:{value:359,perSecond:11.97},upstream_rq_pending_total:{value:41,perSecond:1.37},upstream_rq_total:{value:152775,perSecond:5092.49}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5148.71,totalRequests:154464,latency:{min:.364,mean:7.18,max:87.302,pstdev:12.25,percentiles:{p50:3.413,p75:5.598,p80:6.37,p90:10.396,p95:46.991,p99:54.482,p999:63.635}},resources:{envoyGateway:{memory:{min:161.52,max:166.58,mean:165.37},cpu:{min:.4,max:9,mean:1.37}},envoyProxy:{memory:{min:33.15,max:37.81,mean:37.24},cpu:{min:0,max:94.81,mean:11.44}}},poolOverflow:361,upstreamConnections:39,counters:{"benchmark.http_2xx":{value:154464,perSecond:5148.71},"benchmark.pool_overflow":{value:361,perSecond:12.03},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:39,perSecond:1.3},upstream_cx_rx_bytes_total:{value:24250848,perSecond:808347.33},upstream_cx_total:{value:39,perSecond:1.3},upstream_cx_tx_bytes_total:{value:6952410,perSecond:231742.91},upstream_rq_pending_overflow:{value:361,perSecond:12.03},upstream_rq_pending_total:{value:39,perSecond:1.3},upstream_rq_total:{value:154498,perSecond:5149.84}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5157.38,totalRequests:154725,latency:{min:.377,mean:7.029,max:118.747,pstdev:12.31,percentiles:{p50:3.257,p75:5.25,p80:5.989,p90:10.043,p95:47.198,p99:54.951,p999:65.818}},resources:{envoyGateway:{memory:{min:175.42,max:187.87,mean:185.45},cpu:{min:.53,max:81.07,mean:3.8}},envoyProxy:{memory:{min:53.46,max:57.79,mean:57.44},cpu:{min:0,max:99.89,mean:12.24}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:154725,perSecond:5157.38},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24291825,perSecond:809707.91},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6963525,perSecond:232111.88},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:154745,perSecond:5158.04}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5150.77,totalRequests:154527,latency:{min:.381,mean:6.971,max:113.311,pstdev:12.316,percentiles:{p50:3.151,p75:5.206,p80:5.983,p90:10.075,p95:46.688,p99:54.849,p999:68.308}},resources:{envoyGateway:{memory:{min:195.37,max:203.44,mean:200.65},cpu:{min:.13,max:1,mean:.75}},envoyProxy:{memory:{min:73.68,max:79.95,mean:79.06},cpu:{min:0,max:99.82,mean:11.76}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:154527,perSecond:5150.77},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24260739,perSecond:808671.54},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6955065,perSecond:231829.84},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:154557,perSecond:5151.77}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:4819.38,totalRequests:144582,latency:{min:.367,mean:7.667,max:117.051,pstdev:13.071,percentiles:{p50:3.465,p75:5.936,p80:6.838,p90:12.27,p95:47.808,p99:58.836,p999:76.193}},resources:{envoyGateway:{memory:{min:232.1,max:248.36,mean:237.82},cpu:{min:.07,max:1.47,mean:.9}},envoyProxy:{memory:{min:129.97,max:130.7,mean:130.25},cpu:{min:0,max:99.96,mean:10.36}}},poolOverflow:361,upstreamConnections:39,counters:{"benchmark.http_2xx":{value:144582,perSecond:4819.38},"benchmark.pool_overflow":{value:361,perSecond:12.03},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:39,perSecond:1.3},upstream_cx_rx_bytes_total:{value:22699374,perSecond:756642.26},upstream_cx_total:{value:39,perSecond:1.3},upstream_cx_tx_bytes_total:{value:6507945,perSecond:216930.48},upstream_rq_pending_overflow:{value:361,perSecond:12.03},upstream_rq_pending_total:{value:39,perSecond:1.3},upstream_rq_total:{value:144621,perSecond:4820.68}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5020.4,totalRequests:150612,latency:{min:.361,mean:7.165,max:136.364,pstdev:12.568,percentiles:{p50:3.218,p75:5.447,p80:6.252,p90:10.566,p95:48.209,p99:55.255,p999:64.63}},resources:{envoyGateway:{memory:{min:214.58,max:217.58,mean:215.77},cpu:{min:.87,max:4,mean:1.24}},envoyProxy:{memory:{min:127.79,max:128.03,mean:127.91},cpu:{min:0,max:100.06,mean:7.23}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:150612,perSecond:5020.4},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:23646084,perSecond:788202.27},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6779250,perSecond:225974.85},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:150650,perSecond:5021.66}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5156.43,totalRequests:154695,latency:{min:.398,mean:7.756,max:94.031,pstdev:13.474,percentiles:{p50:3.283,p75:5.911,p80:6.883,p90:12.712,p95:50.251,p99:57.212,p999:66.996}},resources:{envoyGateway:{memory:{min:209.45,max:217.88,mean:215.58},cpu:{min:.67,max:7.6,mean:1.57}},envoyProxy:{memory:{min:127.73,max:128.02,mean:127.87},cpu:{min:0,max:99.9,mean:4.75}}},poolOverflow:358,upstreamConnections:42,counters:{"benchmark.http_2xx":{value:154695,perSecond:5156.43},"benchmark.pool_overflow":{value:358,perSecond:11.93},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:42,perSecond:1.4},upstream_cx_rx_bytes_total:{value:24287115,perSecond:809559.74},upstream_cx_total:{value:42,perSecond:1.4},upstream_cx_tx_bytes_total:{value:6963075,perSecond:232099.41},upstream_rq_pending_overflow:{value:358,perSecond:11.93},upstream_rq_pending_total:{value:42,perSecond:1.4},upstream_rq_total:{value:154735,perSecond:5157.76}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5162.75,totalRequests:154884,latency:{min:.391,mean:6.928,max:77.328,pstdev:11.972,percentiles:{p50:3.221,p75:5.293,p80:6.082,p90:10.089,p95:46.329,p99:53.424,p999:61.562}},resources:{envoyGateway:{memory:{min:197.94,max:231.62,mean:219.46},cpu:{min:.73,max:41.4,mean:5.76}},envoyProxy:{memory:{min:127.8,max:128.01,mean:127.89},cpu:{min:0,max:100.13,mean:3.03}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:154884,perSecond:5162.75},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24316788,perSecond:810551.95},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6971445,perSecond:232379.31},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:154921,perSecond:5163.98}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5164.55,totalRequests:154939,latency:{min:.363,mean:6.813,max:123.748,pstdev:12.135,percentiles:{p50:3.132,p75:5.066,p80:5.786,p90:9.349,p95:46.854,p99:55.068,p999:64.952}},resources:{envoyGateway:{memory:{min:186.99,max:214.7,mean:194.88},cpu:{min:.73,max:34.27,mean:4.92}},envoyProxy:{memory:{min:130.14,max:130.62,mean:130.27},cpu:{min:0,max:99.81,mean:11.5}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:154939,perSecond:5164.55},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24325423,perSecond:810834.78},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6972975,perSecond:232428.87},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:154955,perSecond:5165.09}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5000.43,totalRequests:150016,latency:{min:.376,mean:7.369,max:108.912,pstdev:12.666,percentiles:{p50:3.291,p75:5.792,p80:6.722,p90:11.795,p95:47.331,p99:55.957,p999:71.471}},resources:{envoyGateway:{memory:{min:203.55,max:219.59,mean:207.71},cpu:{min:.13,max:1.33,mean:.86}},envoyProxy:{memory:{min:130.13,max:130.42,mean:130.26},cpu:{min:0,max:99.81,mean:13.03}}},poolOverflow:361,upstreamConnections:39,counters:{"benchmark.http_2xx":{value:150016,perSecond:5000.43},"benchmark.pool_overflow":{value:361,perSecond:12.03},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:39,perSecond:1.3},upstream_cx_rx_bytes_total:{value:23552512,perSecond:785068.13},upstream_cx_total:{value:39,perSecond:1.3},upstream_cx_tx_bytes_total:{value:6752160,perSecond:225067.53},upstream_rq_pending_overflow:{value:361,perSecond:12.03},upstream_rq_pending_total:{value:39,perSecond:1.3},upstream_rq_total:{value:150048,perSecond:5001.5}}}]},Yie={metadata:{version:"1.4.4",runId:"1.4.4-1763692905323",date:"2025-11-21T02:41:45.323Z",environment:"GitHub CI",description:"Benchmark results for version 1.4.4",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5276.66,totalRequests:158309,latency:{min:.385,mean:7.177,max:74.239,pstdev:12.629,percentiles:{p50:3.424,p75:5.345,p80:6,p90:9.149,p95:49.1,p99:55.275,p999:59.793}},resources:{envoyGateway:{memory:{min:129.45,max:153.16,mean:149.11},cpu:{min:.27,max:.87,mean:.44}},envoyProxy:{memory:{min:0,max:28.43,mean:24.06},cpu:{min:0,max:99.95,mean:9.16}}},poolOverflow:360,upstreamConnections:40,counters:{"benchmark.http_2xx":{value:158309,perSecond:5276.66},"benchmark.pool_overflow":{value:360,perSecond:12},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:40,perSecond:1.33},upstream_cx_rx_bytes_total:{value:24854513,perSecond:828435.92},upstream_cx_total:{value:40,perSecond:1.33},upstream_cx_tx_bytes_total:{value:7125435,perSecond:237500.78},upstream_rq_pending_overflow:{value:360,perSecond:12},upstream_rq_pending_total:{value:40,perSecond:1.33},upstream_rq_total:{value:158343,perSecond:5277.8}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5230.73,totalRequests:156922,latency:{min:.367,mean:6.673,max:75.735,pstdev:11.892,percentiles:{p50:3.219,p75:5.053,p80:5.669,p90:8.493,p95:47.017,p99:53.731,p999:59.07}},resources:{envoyGateway:{memory:{min:153.16,max:162.19,mean:159.96},cpu:{min:.33,max:4.33,mean:.88}},envoyProxy:{memory:{min:28.28,max:34.65,mean:34.01},cpu:{min:0,max:100.09,mean:12.12}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:156922,perSecond:5230.73},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24636754,perSecond:821224.78},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7063155,perSecond:235438.4},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:156959,perSecond:5231.96}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5233.77,totalRequests:157018,latency:{min:.392,mean:6.716,max:74.948,pstdev:12.218,percentiles:{p50:3.086,p75:4.917,p80:5.54,p90:8.473,p95:48.504,p99:54.824,p999:60.995}},resources:{envoyGateway:{memory:{min:154.81,max:164.16,mean:158.99},cpu:{min:.47,max:9.67,mean:2.02}},envoyProxy:{memory:{min:34.51,max:38.95,mean:38.19},cpu:{min:0,max:99.98,mean:12.96}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:157018,perSecond:5233.77},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24651826,perSecond:821701.88},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7066755,perSecond:235551.15},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:157039,perSecond:5234.47}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5200.61,totalRequests:156022,latency:{min:.386,mean:6.733,max:87.748,pstdev:12.052,percentiles:{p50:3.188,p75:5.058,p80:5.703,p90:8.646,p95:47.349,p99:54.261,p999:62.337}},resources:{envoyGateway:{memory:{min:178.22,max:190.05,mean:185.94},cpu:{min:.53,max:63.2,mean:5.17}},envoyProxy:{memory:{min:58.72,max:59.32,mean:59.03},cpu:{min:0,max:100.06,mean:8.71}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:156022,perSecond:5200.61},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24495454,perSecond:816495.26},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7022115,perSecond:234064.8},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:156047,perSecond:5201.44}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5161.32,totalRequests:154842,latency:{min:.39,mean:6.838,max:87.953,pstdev:12.514,percentiles:{p50:3.154,p75:4.94,p80:5.547,p90:8.546,p95:48.75,p99:55.814,p999:66.682}},resources:{envoyGateway:{memory:{min:188.56,max:205.36,mean:199.35},cpu:{min:.2,max:1,mean:.72}},envoyProxy:{memory:{min:80.99,max:81.17,mean:81.05},cpu:{min:0,max:100.11,mean:13.39}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:154842,perSecond:5161.32},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24310194,perSecond:810327.12},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6968970,perSecond:232295.37},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:154866,perSecond:5162.12}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5070.93,totalRequests:152131,latency:{min:.369,mean:7.157,max:95.969,pstdev:13.025,percentiles:{p50:3.187,p75:5.196,p80:5.933,p90:9.716,p95:49.264,p99:58.398,p999:70.475}},resources:{envoyGateway:{memory:{min:235.82,max:250.67,mean:243.33},cpu:{min:.2,max:1.27,mean:.81}},envoyProxy:{memory:{min:127.18,max:127.36,mean:127.27},cpu:{min:0,max:99.82,mean:15.31}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:152131,perSecond:5070.93},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:23884567,perSecond:796135.93},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6847380,perSecond:228241.33},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:152164,perSecond:5072.03}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5231.33,totalRequests:156943,latency:{min:.352,mean:6.847,max:77.496,pstdev:12.213,percentiles:{p50:3.276,p75:5.1,p80:5.725,p90:8.528,p95:48.064,p99:54.683,p999:58.912}},resources:{envoyGateway:{memory:{min:244.6,max:250.95,mean:247.09},cpu:{min:.8,max:3.87,mean:1.17}},envoyProxy:{memory:{min:113.82,max:114,mean:113.88},cpu:{min:0,max:99.92,mean:6.36}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:156943,perSecond:5231.33},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24640051,perSecond:821318.13},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7063740,perSecond:235453.15},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:156972,perSecond:5232.29}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5261.75,totalRequests:157855,latency:{min:.399,mean:6.732,max:77.856,pstdev:12.3,percentiles:{p50:3.112,p75:4.945,p80:5.568,p90:8.439,p95:48.916,p99:54.951,p999:60.592}},resources:{envoyGateway:{memory:{min:224.61,max:255.07,mean:250.77},cpu:{min:.73,max:7.13,mean:1.49}},envoyProxy:{memory:{min:113.8,max:113.98,mean:113.86},cpu:{min:0,max:94.87,mean:7.39}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:157855,perSecond:5261.75},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24783235,perSecond:826094.04},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7104870,perSecond:236825.04},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:157886,perSecond:5262.78}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5237.44,totalRequests:157127,latency:{min:.359,mean:6.712,max:85.757,pstdev:12.224,percentiles:{p50:3.131,p75:4.899,p80:5.53,p90:8.45,p95:48.3,p99:55.074,p999:61.05}},resources:{envoyGateway:{memory:{min:172.34,max:224.61,mean:184.21},cpu:{min:.67,max:65.47,mean:5.97}},envoyProxy:{memory:{min:113.81,max:114,mean:113.88},cpu:{min:0,max:99.95,mean:9.23}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:157127,perSecond:5237.44},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24668939,perSecond:822278.65},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7071930,perSecond:235725.46},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:157154,perSecond:5238.34}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5179.69,totalRequests:155395,latency:{min:.398,mean:6.83,max:80.662,pstdev:12.28,percentiles:{p50:3.2,p75:5.016,p80:5.664,p90:8.694,p95:48.179,p99:55.212,p999:63.549}},resources:{envoyGateway:{memory:{min:179.46,max:205.75,mean:190.6},cpu:{min:.6,max:62.6,mean:3.68}},envoyProxy:{memory:{min:127.33,max:127.48,mean:127.37},cpu:{min:0,max:90.4,mean:7.51}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:155395,perSecond:5179.69},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24397015,perSecond:813211.27},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6993540,perSecond:233111.53},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:155412,perSecond:5180.26}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5186.01,totalRequests:155581,latency:{min:.38,mean:6.971,max:107.388,pstdev:12.508,percentiles:{p50:3.261,p75:5.13,p80:5.781,p90:8.858,p95:48.461,p99:55.611,p999:67.166}},resources:{envoyGateway:{memory:{min:197.3,max:213.13,mean:208.59},cpu:{min:.33,max:69.58,mean:2.16}},envoyProxy:{memory:{min:127.33,max:127.53,mean:127.38},cpu:{min:0,max:93.66,mean:10.66}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:155581,perSecond:5186.01},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24426217,perSecond:814203.16},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7002855,perSecond:233427.33},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:155619,perSecond:5187.27}}}]},Qie={metadata:{version:"1.4.3",runId:"1.4.3-1763692899811",date:"2025-11-21T02:41:39.811Z",environment:"GitHub CI",description:"Benchmark results for version 1.4.3",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5355.55,totalRequests:160667,latency:{min:.358,mean:7.267,max:75.1,pstdev:12.628,percentiles:{p50:3.399,p75:5.544,p80:6.276,p90:9.99,p95:49.121,p99:55.177,p999:60.772}},resources:{envoyGateway:{memory:{min:130.65,max:152.97,mean:147.82},cpu:{min:.2,max:1,mean:.45}},envoyProxy:{memory:{min:0,max:27.79,mean:23.38},cpu:{min:0,max:99.91,mean:7.25}}},poolOverflow:359,upstreamConnections:41,counters:{"benchmark.http_2xx":{value:160667,perSecond:5355.55},"benchmark.pool_overflow":{value:359,perSecond:11.97},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:41,perSecond:1.37},upstream_cx_rx_bytes_total:{value:25224719,perSecond:840822.06},upstream_cx_total:{value:41,perSecond:1.37},upstream_cx_tx_bytes_total:{value:7231860,perSecond:241061.45},upstream_rq_pending_overflow:{value:359,perSecond:11.97},upstream_rq_pending_total:{value:41,perSecond:1.37},upstream_rq_total:{value:160708,perSecond:5356.92}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5340.22,totalRequests:160216,latency:{min:.39,mean:6.79,max:86.708,pstdev:12.266,percentiles:{p50:3.114,p75:5.075,p80:5.778,p90:8.996,p95:48.447,p99:54.765,p999:59.922}},resources:{envoyGateway:{memory:{min:153.72,max:164.07,mean:160.07},cpu:{min:.4,max:4.4,mean:.9}},envoyProxy:{memory:{min:27.43,max:31.89,mean:31.33},cpu:{min:0,max:100.05,mean:11.23}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:160216,perSecond:5340.22},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25153912,perSecond:838414.8},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7211070,perSecond:240354.97},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:160246,perSecond:5341.22}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5324.98,totalRequests:159753,latency:{min:.366,mean:6.637,max:92.008,pstdev:12.072,percentiles:{p50:3.127,p75:4.922,p80:5.533,p90:8.308,p95:48.07,p99:54.439,p999:60.065}},resources:{envoyGateway:{memory:{min:164.91,max:170.05,mean:166.44},cpu:{min:.4,max:8.2,mean:1.32}},envoyProxy:{memory:{min:31.52,max:37.83,mean:37.06},cpu:{min:0,max:92.36,mean:5.35}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:159753,perSecond:5324.98},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:25081221,perSecond:836022.33},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7190550,perSecond:239679.73},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:159790,perSecond:5326.22}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5216.76,totalRequests:156503,latency:{min:.377,mean:6.72,max:78.27,pstdev:12.03,percentiles:{p50:3.196,p75:5.018,p80:5.633,p90:8.582,p95:47.13,p99:54.605,p999:64.385}},resources:{envoyGateway:{memory:{min:179.89,max:190.89,mean:188.89},cpu:{min:.53,max:37.94,mean:4.32}},envoyProxy:{memory:{min:51.75,max:58.28,mean:57.56},cpu:{min:0,max:99.97,mean:10.27}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:156503,perSecond:5216.76},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24570971,perSecond:819031.62},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7044300,perSecond:234809.79},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:156540,perSecond:5218}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5209.26,totalRequests:156278,latency:{min:.39,mean:6.375,max:101.388,pstdev:11.924,percentiles:{p50:2.96,p75:4.644,p80:5.225,p90:7.832,p95:47.497,p99:54.636,p999:65.597}},resources:{envoyGateway:{memory:{min:198.36,max:209.82,mean:204.77},cpu:{min:.47,max:39.55,mean:2.27}},envoyProxy:{memory:{min:77.96,max:78.17,mean:78.04},cpu:{min:0,max:99.98,mean:5.25}}},poolOverflow:365,upstreamConnections:35,counters:{"benchmark.http_2xx":{value:156278,perSecond:5209.26},"benchmark.pool_overflow":{value:365,perSecond:12.17},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:35,perSecond:1.17},upstream_cx_rx_bytes_total:{value:24535646,perSecond:817853.19},upstream_cx_total:{value:35,perSecond:1.17},upstream_cx_tx_bytes_total:{value:7034085,perSecond:234469.02},upstream_rq_pending_overflow:{value:365,perSecond:12.17},upstream_rq_pending_total:{value:35,perSecond:1.17},upstream_rq_total:{value:156313,perSecond:5210.42}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5098.94,totalRequests:152971,latency:{min:.359,mean:6.888,max:82.657,pstdev:12.606,percentiles:{p50:3.124,p75:4.997,p80:5.658,p90:8.935,p95:48.592,p99:56.84,p999:68.64}},resources:{envoyGateway:{memory:{min:228.83,max:240.91,mean:237.53},cpu:{min:.13,max:1.2,mean:.8}},envoyProxy:{memory:{min:126.34,max:126.55,mean:126.44},cpu:{min:0,max:100.05,mean:11.87}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:152971,perSecond:5098.94},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24016447,perSecond:800534.22},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6884370,perSecond:229474.98},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:152986,perSecond:5099.44}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5357.63,totalRequests:160736,latency:{min:.377,mean:6.733,max:73.097,pstdev:11.999,percentiles:{p50:3.204,p75:5.032,p80:5.678,p90:8.677,p95:47.718,p99:54.052,p999:59.168}},resources:{envoyGateway:{memory:{min:238.38,max:246.22,mean:241.42},cpu:{min:.73,max:3.93,mean:1.17}},envoyProxy:{memory:{min:122.09,max:122.25,mean:122.14},cpu:{min:0,max:99.72,mean:9.75}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:160736,perSecond:5357.63},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25235552,perSecond:841148.66},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7234650,perSecond:241144.56},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:160770,perSecond:5358.77}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5332.35,totalRequests:159971,latency:{min:.39,mean:6.8,max:72.916,pstdev:12.278,percentiles:{p50:3.17,p75:4.982,p80:5.616,p90:8.533,p95:48.674,p99:55.203,p999:59.807}},resources:{envoyGateway:{memory:{min:240.27,max:254.06,mean:244.17},cpu:{min:.67,max:7.07,mean:1.48}},envoyProxy:{memory:{min:122.07,max:122.28,mean:122.13},cpu:{min:0,max:100.09,mean:9.45}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:159971,perSecond:5332.35},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25115447,perSecond:837179.18},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7200405,perSecond:240012.82},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:160009,perSecond:5333.62}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5327.29,totalRequests:159819,latency:{min:.369,mean:6.798,max:75.177,pstdev:12.404,percentiles:{p50:3.117,p75:4.972,p80:5.617,p90:8.628,p95:49.203,p99:55.308,p999:61.265}},resources:{envoyGateway:{memory:{min:183.42,max:257.85,mean:238.95},cpu:{min:.67,max:67.53,mean:7.3}},envoyProxy:{memory:{min:122.02,max:122.51,mean:122.15},cpu:{min:0,max:99.85,mean:14.48}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:159819,perSecond:5327.29},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25091583,perSecond:836384.72},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7193565,perSecond:239785.1},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:159857,perSecond:5328.56}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5289.39,totalRequests:158686,latency:{min:.368,mean:6.822,max:81.756,pstdev:12.344,percentiles:{p50:3.163,p75:4.985,p80:5.606,p90:8.64,p95:48.357,p99:55.128,p999:63.125}},resources:{envoyGateway:{memory:{min:181.54,max:195.97,mean:192.74},cpu:{min:.33,max:72.2,mean:3.57}},envoyProxy:{memory:{min:126.37,max:126.8,mean:126.47},cpu:{min:0,max:62.71,mean:1.45}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:158686,perSecond:5289.39},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24913702,perSecond:830433.73},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7142175,perSecond:238065.91},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:158715,perSecond:5290.35}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5169.42,totalRequests:155086,latency:{min:.391,mean:7.03,max:99.708,pstdev:12.686,percentiles:{p50:3.21,p75:5.119,p80:5.775,p90:9.064,p95:49.074,p99:56.016,p999:65.034}},resources:{envoyGateway:{memory:{min:192.96,max:208.64,mean:205.72},cpu:{min:.33,max:40.87,mean:2.37}},envoyProxy:{memory:{min:126.37,max:126.55,mean:126.42},cpu:{min:0,max:67.89,mean:1.84}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:155086,perSecond:5169.42},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24348502,perSecond:811598.23},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6979860,perSecond:232656.7},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:155108,perSecond:5170.15}}}]},Zie={metadata:{version:"1.4.2",runId:"1.4.2-1752805392474",date:"2025-07-18T02:23:12.474Z",environment:"GitHub CI",description:"Benchmark results for version 1.4.2",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5153.92,totalRequests:154618,latency:{min:.383,mean:7.923,max:80.375,pstdev:13.254,percentiles:{p50:3.722,p75:6.072,p80:6.915,p90:11.685,p95:49.872,p99:56.281,p999:62.722}},resources:{envoyGateway:{memory:{min:131.64,max:158.27,mean:153.65},cpu:{min:.13,max:1,mean:.43}},envoyProxy:{memory:{min:0,max:27.04,mean:24.5},cpu:{min:0,max:92.27,mean:13.11}}},poolOverflow:357,upstreamConnections:43},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5214.96,totalRequests:156456,latency:{min:.392,mean:6.917,max:94.703,pstdev:12.289,percentiles:{p50:3.265,p75:5.168,p80:5.85,p90:9.014,p95:48.109,p99:54.501,p999:61.138}},resources:{envoyGateway:{memory:{min:151.75,max:162.37,mean:156.16},cpu:{min:.27,max:4.07,mean:.93}},envoyProxy:{memory:{min:26.85,max:33.23,mean:31.93},cpu:{min:0,max:99.8,mean:2.75}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5286.96,totalRequests:158609,latency:{min:.368,mean:7.734,max:92.332,pstdev:12.933,percentiles:{p50:3.787,p75:5.897,p80:6.637,p90:10.518,p95:49.209,p99:55.494,p999:62.668}},resources:{envoyGateway:{memory:{min:154.29,max:162.45,mean:160.12},cpu:{min:.4,max:8.13,mean:1.15}},envoyProxy:{memory:{min:33.08,max:37.43,mean:36.96},cpu:{min:0,max:99.94,mean:12.84}}},poolOverflow:357,upstreamConnections:43},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5071.92,totalRequests:152158,latency:{min:.367,mean:7.108,max:96.673,pstdev:12.611,percentiles:{p50:3.259,p75:5.273,p80:5.983,p90:9.54,p95:48.895,p99:55.816,p999:64.583}},resources:{envoyGateway:{memory:{min:178.72,max:189.43,mean:185.02},cpu:{min:.53,max:49.47,mean:4.51}},envoyProxy:{memory:{min:53.3,max:57.54,mean:57.04},cpu:{min:0,max:100.16,mean:15}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:4987.92,totalRequests:149640,latency:{min:.394,mean:7.071,max:108.81,pstdev:12.666,percentiles:{p50:3.283,p75:5.167,p80:5.821,p90:9.217,p95:48.912,p99:56.031,p999:68.722}},resources:{envoyGateway:{memory:{min:187.59,max:203.43,mean:199.65},cpu:{min:.27,max:48.25,mean:1.88}},envoyProxy:{memory:{min:73.41,max:79.6,mean:79.35},cpu:{min:0,max:99.91,mean:11.81}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:4945.69,totalRequests:148373,latency:{min:.411,mean:7.306,max:101.023,pstdev:12.99,percentiles:{p50:3.249,p75:5.44,p80:6.223,p90:10.246,p95:49.207,p99:57.444,p999:69.57}},resources:{envoyGateway:{memory:{min:231.85,max:243.1,mean:237.75},cpu:{min:.2,max:1.2,mean:.84}},envoyProxy:{memory:{min:129.84,max:130.36,mean:129.96},cpu:{min:0,max:99.89,mean:11.78}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5200.02,totalRequests:156013,latency:{min:.397,mean:7.832,max:75.223,pstdev:13.154,percentiles:{p50:3.651,p75:5.953,p80:6.758,p90:11.656,p95:49.915,p99:56.15,p999:62.173}},resources:{envoyGateway:{memory:{min:262.52,max:266.5,mean:263.99},cpu:{min:.67,max:3.53,mean:1.15}},envoyProxy:{memory:{min:123.49,max:123.65,mean:123.54},cpu:{min:0,max:100.22,mean:7.55}}},poolOverflow:357,upstreamConnections:43},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5116.68,totalRequests:153503,latency:{min:.404,mean:7.069,max:71.688,pstdev:12.498,percentiles:{p50:3.313,p75:5.203,p80:5.888,p90:9.173,p95:48.934,p99:55.58,p999:61.552}},resources:{envoyGateway:{memory:{min:266.25,max:277.75,mean:267.54},cpu:{min:.67,max:7.13,mean:1.51}},envoyProxy:{memory:{min:123.47,max:123.67,mean:123.53},cpu:{min:0,max:99.78,mean:4.47}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5153.5,totalRequests:154605,latency:{min:.376,mean:6.989,max:80.056,pstdev:12.394,percentiles:{p50:3.284,p75:5.189,p80:5.871,p90:9.047,p95:48.644,p99:55.019,p999:61.106}},resources:{envoyGateway:{memory:{min:170.85,max:277.75,mean:210.44},cpu:{min:.67,max:68.27,mean:7.39}},envoyProxy:{memory:{min:123.46,max:123.75,mean:123.55},cpu:{min:0,max:100.02,mean:16.06}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5125.52,totalRequests:153766,latency:{min:.369,mean:6.827,max:85.323,pstdev:12.196,percentiles:{p50:3.193,p75:5.036,p80:5.699,p90:8.862,p95:47.597,p99:54.747,p999:64.284}},resources:{envoyGateway:{memory:{min:181.68,max:196.62,mean:192.08},cpu:{min:.4,max:72.6,mean:3.62}},envoyProxy:{memory:{min:129.86,max:130.06,mean:129.95},cpu:{min:0,max:100.07,mean:13.11}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5130.15,totalRequests:153916,latency:{min:.389,mean:7.004,max:103.731,pstdev:12.505,percentiles:{p50:3.244,p75:5.247,p80:5.944,p90:9.184,p95:48.279,p99:55.42,p999:66.549}},resources:{envoyGateway:{memory:{min:205.04,max:208.2,mean:206.96},cpu:{min:.33,max:54.27,mean:2.52}},envoyProxy:{memory:{min:129.85,max:130.02,mean:129.9},cpu:{min:0,max:91.79,mean:22.69}}},poolOverflow:362,upstreamConnections:38}]},Jie={metadata:{version:"1.4.1",runId:"1.4.1-1750189826783",date:"2025-06-04",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.4.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.4.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5440.31,totalRequests:163209,latency:{min:.335,mean:6.565,max:66.668,pstdev:11.48,percentiles:{p50:3.258,p75:5.079,p80:5.722,p90:8.679,p95:45.924,p99:53.512,p999:58.22}},resources:{envoyGateway:{memory:{min:128.02,max:151.26,mean:147.41},cpu:{min:.27,max:.67,mean:.45}},envoyProxy:{memory:{min:0,max:26.92,mean:22.58},cpu:{min:0,max:99.73,mean:6.02}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5429.88,totalRequests:162900,latency:{min:.345,mean:6.468,max:70.791,pstdev:11.793,percentiles:{p50:3.17,p75:4.794,p80:5.311,p90:7.534,p95:47.4,p99:53.536,p999:58.034}},resources:{envoyGateway:{memory:{min:151.26,max:170.78,mean:161.92},cpu:{min:.4,max:4.33,mean:.97}},envoyProxy:{memory:{min:26.73,max:33.13,mean:31.63},cpu:{min:0,max:99.94,mean:3.35}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5499.86,totalRequests:164996,latency:{min:.391,mean:8.147,max:99.663,pstdev:13.319,percentiles:{p50:3.957,p75:6.308,p80:7.12,p90:11.799,p95:49.942,p99:56.19,p999:62.709}},resources:{envoyGateway:{memory:{min:161.19,max:165.52,mean:163.96},cpu:{min:.4,max:8.67,mean:1.36}},envoyProxy:{memory:{min:32.98,max:39.18,mean:38.14},cpu:{min:0,max:99.97,mean:8.67}}},poolOverflow:353,upstreamConnections:47},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5335.1,totalRequests:160053,latency:{min:.365,mean:6.734,max:90.963,pstdev:12.096,percentiles:{p50:3.228,p75:5.042,p80:5.649,p90:8.465,p95:47.704,p99:54.396,p999:61.714}},resources:{envoyGateway:{memory:{min:183.87,max:223.25,mean:206.96},cpu:{min:.47,max:79.87,mean:3.9}},envoyProxy:{memory:{min:57.15,max:57.52,mean:57.34},cpu:{min:0,max:99.97,mean:13.49}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5256.52,totalRequests:157696,latency:{min:.389,mean:6.32,max:77.848,pstdev:11.829,percentiles:{p50:2.974,p75:4.705,p80:5.292,p90:7.729,p95:47.173,p99:54.317,p999:64.679}},resources:{envoyGateway:{memory:{min:186.16,max:199.19,mean:195.68},cpu:{min:.4,max:1.2,mean:.75}},envoyProxy:{memory:{min:63.26,max:79.43,mean:79.04},cpu:{min:0,max:99.86,mean:17.64}}},poolOverflow:365,upstreamConnections:35},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5280.09,totalRequests:158409,latency:{min:.387,mean:6.871,max:94.064,pstdev:12.441,percentiles:{p50:3.186,p75:5.019,p80:5.651,p90:8.766,p95:48.361,p99:55.758,p999:67.403}},resources:{envoyGateway:{memory:{min:230.81,max:243.68,mean:238.65},cpu:{min:.13,max:1.13,mean:.8}},envoyProxy:{memory:{min:127.63,max:127.86,mean:127.72},cpu:{min:0,max:85.57,mean:6.19}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5430.18,totalRequests:162909,latency:{min:.376,mean:6.679,max:79.63,pstdev:12.142,percentiles:{p50:3.147,p75:5.015,p80:5.63,p90:8.374,p95:48.377,p99:54.654,p999:59.858}},resources:{envoyGateway:{memory:{min:164.61,max:169.75,mean:165.39},cpu:{min:.8,max:3.47,mean:1.14}},envoyProxy:{memory:{min:121.22,max:121.61,mean:121.3},cpu:{min:0,max:99.74,mean:8.02}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5506.49,totalRequests:165195,latency:{min:.386,mean:8.319,max:85.86,pstdev:13.567,percentiles:{p50:3.951,p75:6.305,p80:7.155,p90:12.741,p95:50.714,p99:57.303,p999:63.928}},resources:{envoyGateway:{memory:{min:165.63,max:175.23,mean:169.06},cpu:{min:.8,max:7.53,mean:1.54}},envoyProxy:{memory:{min:111.91,max:121.36,mean:113.46},cpu:{min:0,max:99.75,mean:7.62}}},poolOverflow:352,upstreamConnections:48},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5452.96,totalRequests:163589,latency:{min:.395,mean:7.694,max:97.46,pstdev:12.949,percentiles:{p50:3.636,p75:5.828,p80:6.627,p90:10.929,p95:49.506,p99:55.681,p999:62.369}},resources:{envoyGateway:{memory:{min:166.64,max:195.48,mean:174.79},cpu:{min:.8,max:38.2,mean:5.63}},envoyProxy:{memory:{min:111.8,max:112.36,mean:111.95},cpu:{min:0,max:35.17,mean:2.77}}},poolOverflow:356,upstreamConnections:44},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5360.33,totalRequests:160815,latency:{min:.354,mean:6.538,max:92.344,pstdev:12.045,percentiles:{p50:3.068,p75:4.77,p80:5.341,p90:7.974,p95:47.742,p99:54.48,p999:62.144}},resources:{envoyGateway:{memory:{min:180.27,max:192.65,mean:189.01},cpu:{min:.67,max:46.53,mean:4.41}},envoyProxy:{memory:{min:127.66,max:127.84,mean:127.72},cpu:{min:0,max:100.03,mean:9.14}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5334.03,totalRequests:160024,latency:{min:.392,mean:6.782,max:132.493,pstdev:12.373,percentiles:{p50:3.182,p75:4.977,p80:5.586,p90:8.359,p95:48.365,p99:55.252,p999:64.712}},resources:{envoyGateway:{memory:{min:203.37,max:217.03,mean:209.04},cpu:{min:.67,max:5.67,mean:1.33}},envoyProxy:{memory:{min:127.65,max:127.84,mean:127.72},cpu:{min:0,max:99.86,mean:9.91}}},poolOverflow:362,upstreamConnections:38}]},ese={metadata:{version:"1.4.0",runId:"1.4.0-1750189826781",date:"2025-05-14",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.4.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.4.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5433.23,totalRequests:163e3,latency:{min:.367,mean:6.485,max:65.673,pstdev:11.042,percentiles:{p50:3.222,p75:5.166,p80:5.879,p90:9.253,p95:43.97,p99:52.201,p999:56.854}},resources:{envoyGateway:{memory:{min:128.52,max:156.24,mean:150.28},cpu:{min:.13,max:.67,mean:.44}},envoyProxy:{memory:{min:0,max:27.01,mean:21.73},cpu:{min:0,max:72.36,mean:2.32}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5340.69,totalRequests:160221,latency:{min:.355,mean:6.582,max:88.674,pstdev:11.849,percentiles:{p50:3.134,p75:4.984,p80:5.597,p90:8.545,p95:46.972,p99:53.663,p999:59.625}},resources:{envoyGateway:{memory:{min:155.3,max:169.25,mean:159.23},cpu:{min:.27,max:4.73,mean:.91}},envoyProxy:{memory:{min:26.64,max:33.18,mean:32.22},cpu:{min:0,max:99.91,mean:11.1}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5205.41,totalRequests:156162,latency:{min:.384,mean:4.221,max:63.5,pstdev:9.204,percentiles:{p50:2.039,p75:3.063,p80:3.399,p90:4.605,p95:7.844,p99:49.758,p999:54.032}},resources:{envoyGateway:{memory:{min:156.77,max:174.36,mean:168.53},cpu:{min:.4,max:8.8,mean:1.37}},envoyProxy:{memory:{min:32.83,max:37.05,mean:36.58},cpu:{min:0,max:99.97,mean:4.39}}},poolOverflow:377,upstreamConnections:23},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5271.84,totalRequests:158157,latency:{min:.393,mean:7.209,max:93.327,pstdev:12.64,percentiles:{p50:3.281,p75:5.443,p80:6.241,p90:10.258,p95:48.494,p99:55.793,p999:65.497}},resources:{envoyGateway:{memory:{min:179.66,max:187.8,mean:184.81},cpu:{min:.53,max:27.13,mean:4.87}},envoyProxy:{memory:{min:53.06,max:57.31,mean:56.58},cpu:{min:0,max:99.96,mean:15.82}}},poolOverflow:360,upstreamConnections:40},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5351.64,totalRequests:160555,latency:{min:.37,mean:6.797,max:91.549,pstdev:12.276,percentiles:{p50:3.145,p75:5.052,p80:5.728,p90:8.916,p95:47.915,p99:54.947,p999:65.368}},resources:{envoyGateway:{memory:{min:186.4,max:200.27,mean:195.8},cpu:{min:.4,max:26.07,mean:1.71}},envoyProxy:{memory:{min:71.16,max:77.36,mean:77},cpu:{min:0,max:94.88,mean:3.39}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5239.17,totalRequests:157179,latency:{min:.367,mean:6.908,max:97.939,pstdev:12.608,percentiles:{p50:3.176,p75:5.046,p80:5.68,p90:8.77,p95:48.472,p99:56.449,p999:68.317}},resources:{envoyGateway:{memory:{min:220.03,max:237.27,mean:233.38},cpu:{min:.07,max:1.2,mean:.78}},envoyProxy:{memory:{min:129.13,max:129.59,mean:129.34},cpu:{min:0,max:74.43,mean:2.24}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5409.79,totalRequests:162296,latency:{min:.386,mean:6.69,max:71.688,pstdev:12.144,percentiles:{p50:3.075,p75:4.937,p80:5.61,p90:8.727,p95:48.252,p99:54.595,p999:59.408}},resources:{envoyGateway:{memory:{min:165.91,max:176.04,mean:168.11},cpu:{min:.67,max:3.73,mean:1.23}},envoyProxy:{memory:{min:123.28,max:123.45,mean:123.35},cpu:{min:0,max:99.72,mean:9.08}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5480.62,totalRequests:164426,latency:{min:.378,mean:7.119,max:85.032,pstdev:12.404,percentiles:{p50:3.39,p75:5.34,p80:6.015,p90:9.3,p95:48.457,p99:55.005,p999:60.284}},resources:{envoyGateway:{memory:{min:165.36,max:171.88,mean:169.47},cpu:{min:.6,max:6.8,mean:1.44}},envoyProxy:{memory:{min:123.27,max:123.97,mean:123.42},cpu:{min:0,max:100.05,mean:11.5}}},poolOverflow:359,upstreamConnections:41},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5413.63,totalRequests:162409,latency:{min:.357,mean:6.664,max:77.307,pstdev:12.03,percentiles:{p50:3.14,p75:4.935,p80:5.56,p90:8.456,p95:47.661,p99:54.544,p999:61.11}},resources:{envoyGateway:{memory:{min:170.86,max:186.68,mean:173.53},cpu:{min:.67,max:67.27,mean:7.29}},envoyProxy:{memory:{min:123.27,max:129.61,mean:124.04},cpu:{min:0,max:100,mean:5.99}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5356.13,totalRequests:160684,latency:{min:.376,mean:6.544,max:86.54,pstdev:11.908,percentiles:{p50:3.079,p75:4.927,p80:5.554,p90:8.36,p95:47.069,p99:54.265,p999:62.601}},resources:{envoyGateway:{memory:{min:176.87,max:192.99,mean:189.97},cpu:{min:.6,max:73.6,mean:5.05}},envoyProxy:{memory:{min:129.54,max:129.76,mean:129.65},cpu:{min:0,max:100.08,mean:11.45}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5339.99,totalRequests:160200,latency:{min:.395,mean:6.772,max:99.7,pstdev:12.345,percentiles:{p50:3.118,p75:4.954,p80:5.598,p90:8.672,p95:48.261,p99:55.498,p999:65.902}},resources:{envoyGateway:{memory:{min:199.81,max:210.76,mean:205.85},cpu:{min:.4,max:31.13,mean:2.01}},envoyProxy:{memory:{min:129.54,max:129.74,mean:129.6},cpu:{min:0,max:99.87,mean:8.99}}},poolOverflow:362,upstreamConnections:38}]},tse={metadata:{version:"1.3.3",runId:"1.3.3-1750189826778",date:"2025-05-09",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.3",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.3/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5302.05,totalRequests:159067,latency:{min:.384,mean:7.44,max:68.399,pstdev:12.191,percentiles:{p50:3.692,p75:5.903,p80:6.67,p90:10.777,p95:47.519,p99:54.405,p999:59.346}},resources:{envoyGateway:{memory:{min:126.17,max:126.17,mean:126.17},cpu:{min:.95,max:.95,mean:.95}},envoyProxy:{memory:{min:25.93,max:25.93,mean:25.93},cpu:{min:30.42,max:30.42,mean:30.42}}},poolOverflow:358,upstreamConnections:42},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5270.25,totalRequests:158112,latency:{min:.392,mean:7.067,max:77.467,pstdev:12.552,percentiles:{p50:3.33,p75:5.225,p80:5.887,p90:8.906,p95:49.113,p99:55.103,p999:60.295}},resources:{envoyGateway:{memory:{min:145.89,max:145.89,mean:145.89},cpu:{min:1.66,max:1.66,mean:1.66}},envoyProxy:{memory:{min:32.1,max:32.1,mean:32.1},cpu:{min:60.71,max:60.71,mean:60.71}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5307.61,totalRequests:159230,latency:{min:.387,mean:7.35,max:76.185,pstdev:12.732,percentiles:{p50:3.508,p75:5.524,p80:6.22,p90:9.652,p95:49.1,p99:55.363,p999:62.654}},resources:{envoyGateway:{memory:{min:153.05,max:153.05,mean:153.05},cpu:{min:3.08,max:3.08,mean:3.08}},envoyProxy:{memory:{min:38.29,max:38.29,mean:38.29},cpu:{min:91.5,max:91.5,mean:91.5}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5139.63,totalRequests:154189,latency:{min:.39,mean:7.376,max:78.098,pstdev:12.993,percentiles:{p50:3.429,p75:5.431,p80:6.116,p90:9.633,p95:49.809,p99:56.043,p999:64.651}},resources:{envoyGateway:{memory:{min:152.28,max:152.28,mean:152.28},cpu:{min:15.6,max:15.6,mean:15.6}},envoyProxy:{memory:{min:56.33,max:56.33,mean:56.33},cpu:{min:124.15,max:124.15,mean:124.15}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5169.8,totalRequests:155094,latency:{min:.374,mean:7.385,max:105.918,pstdev:13.085,percentiles:{p50:3.382,p75:5.336,p80:6.024,p90:9.658,p95:50.104,p99:56.487,p999:66.418}},resources:{envoyGateway:{memory:{min:166.29,max:166.29,mean:166.29},cpu:{min:28.13,max:28.13,mean:28.13}},envoyProxy:{memory:{min:76.53,max:76.53,mean:76.53},cpu:{min:157.45,max:157.45,mean:157.45}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:4963.46,totalRequests:148908,latency:{min:.374,mean:7.335,max:94.58,pstdev:13.294,percentiles:{p50:3.255,p75:5.279,p80:5.998,p90:9.532,p95:50.294,p99:58.908,p999:70.729}},resources:{envoyGateway:{memory:{min:199.79,max:199.79,mean:199.79},cpu:{min:61.67,max:61.67,mean:61.67}},envoyProxy:{memory:{min:120.77,max:120.77,mean:120.77},cpu:{min:195.1,max:195.1,mean:195.1}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5200.07,totalRequests:156001,latency:{min:.395,mean:7.53,max:81.936,pstdev:13.142,percentiles:{p50:3.438,p75:5.497,p80:6.226,p90:10.218,p95:50.345,p99:56.436,p999:61.919}},resources:{envoyGateway:{memory:{min:221.87,max:221.87,mean:221.87},cpu:{min:114.77,max:114.77,mean:114.77}},envoyProxy:{memory:{min:121.27,max:121.27,mean:121.27},cpu:{min:356.4,max:356.4,mean:356.4}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5229.66,totalRequests:156893,latency:{min:.368,mean:6.911,max:72.273,pstdev:12.396,percentiles:{p50:3.227,p75:5.075,p80:5.695,p90:8.751,p95:48.676,p99:54.822,p999:59.865}},resources:{envoyGateway:{memory:{min:221.8,max:221.8,mean:221.8},cpu:{min:114.13,max:114.13,mean:114.13}},envoyProxy:{memory:{min:121.22,max:121.22,mean:121.22},cpu:{min:325.9,max:325.9,mean:325.9}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5099.34,totalRequests:152980,latency:{min:.357,mean:6.637,max:68.1,pstdev:12.012,percentiles:{p50:3.167,p75:4.972,p80:5.58,p90:8.302,p95:47.65,p99:53.993,p999:59.299}},resources:{envoyGateway:{memory:{min:182.69,max:182.69,mean:182.69},cpu:{min:113.02,max:113.02,mean:113.02}},envoyProxy:{memory:{min:121.2,max:121.2,mean:121.2},cpu:{min:295.3,max:295.3,mean:295.3}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5145.13,totalRequests:154357,latency:{min:.379,mean:7.234,max:111.517,pstdev:12.814,percentiles:{p50:3.381,p75:5.331,p80:5.993,p90:9.269,p95:49.465,p99:55.562,p999:64.862}},resources:{envoyGateway:{memory:{min:159.09,max:159.09,mean:159.09},cpu:{min:102.57,max:102.57,mean:102.57}},envoyProxy:{memory:{min:121.08,max:121.08,mean:121.08},cpu:{min:263.29,max:263.29,mean:263.29}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5130.95,totalRequests:153929,latency:{min:.365,mean:7.098,max:95.834,pstdev:12.843,percentiles:{p50:3.267,p75:5.11,p80:5.752,p90:8.975,p95:49.702,p99:56.408,p999:67.33}},resources:{envoyGateway:{memory:{min:163.91,max:163.91,mean:163.91},cpu:{min:91.18,max:91.18,mean:91.18}},envoyProxy:{memory:{min:120.91,max:120.91,mean:120.91},cpu:{min:230.77,max:230.77,mean:230.77}}},poolOverflow:362,upstreamConnections:38}]},nse={metadata:{version:"1.3.2",runId:"1.3.2-1750189826777",date:"2025-03-24",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.2",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.2/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5203.06,totalRequests:156092,latency:{min:.371,mean:6.97,max:73.949,pstdev:12.106,percentiles:{p50:3.331,p75:5.396,p80:6.08,p90:9.715,p95:47.564,p99:55.666,p999:60.872}},resources:{envoyGateway:{memory:{min:126.68,max:126.68,mean:126.68},cpu:{min:.99,max:.99,mean:.99}},envoyProxy:{memory:{min:28.17,max:28.17,mean:28.17},cpu:{min:30.49,max:30.49,mean:30.49}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5157.35,totalRequests:154724,latency:{min:.38,mean:6.752,max:83.992,pstdev:12.526,percentiles:{p50:3.089,p75:4.875,p80:5.484,p90:8.253,p95:49.682,p99:55.398,p999:61.507}},resources:{envoyGateway:{memory:{min:129.05,max:129.05,mean:129.05},cpu:{min:1.79,max:1.79,mean:1.79}},envoyProxy:{memory:{min:32.33,max:32.33,mean:32.33},cpu:{min:61.02,max:61.02,mean:61.02}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5052.19,totalRequests:151566,latency:{min:.363,mean:7.564,max:72.122,pstdev:13.492,percentiles:{p50:3.384,p75:5.472,p80:6.191,p90:9.941,p95:51.32,p99:57.128,p999:63.107}},resources:{envoyGateway:{memory:{min:146.92,max:146.92,mean:146.92},cpu:{min:3.17,max:3.17,mean:3.17}},envoyProxy:{memory:{min:40.52,max:40.52,mean:40.52},cpu:{min:91.79,max:91.79,mean:91.79}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5101.42,totalRequests:153051,latency:{min:.397,mean:6.832,max:82.624,pstdev:12.894,percentiles:{p50:2.99,p75:4.798,p80:5.418,p90:8.366,p95:50.391,p99:56.737,p999:65.114}},resources:{envoyGateway:{memory:{min:154.98,max:154.98,mean:154.98},cpu:{min:15.2,max:15.2,mean:15.2}},envoyProxy:{memory:{min:58.7,max:58.7,mean:58.7},cpu:{min:124.54,max:124.54,mean:124.54}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:4948.44,totalRequests:148459,latency:{min:.398,mean:7.2,max:94.949,pstdev:13.256,percentiles:{p50:3.208,p75:5.057,p80:5.652,p90:8.78,p95:50.821,p99:57.442,p999:66.746}},resources:{envoyGateway:{memory:{min:163.01,max:163.01,mean:163.01},cpu:{min:27.68,max:27.68,mean:27.68}},envoyProxy:{memory:{min:78.9,max:78.9,mean:78.9},cpu:{min:158.2,max:158.2,mean:158.2}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:4933.76,totalRequests:148015,latency:{min:.361,mean:7.088,max:127.959,pstdev:13.349,percentiles:{p50:3.052,p75:4.885,p80:5.529,p90:8.785,p95:50.7,p99:59.123,p999:70.66}},resources:{envoyGateway:{memory:{min:196.05,max:196.05,mean:196.05},cpu:{min:62.32,max:62.32,mean:62.32}},envoyProxy:{memory:{min:127.19,max:127.19,mean:127.19},cpu:{min:196.79,max:196.79,mean:196.79}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5116.93,totalRequests:153515,latency:{min:.387,mean:9.017,max:78.245,pstdev:15.046,percentiles:{p50:3.922,p75:6.583,p80:7.609,p90:16.301,p95:54.007,p99:59.99,p999:67.956}},resources:{envoyGateway:{memory:{min:210.06,max:210.06,mean:210.06},cpu:{min:115.56,max:115.56,mean:115.56}},envoyProxy:{memory:{min:110.31,max:110.31,mean:110.31},cpu:{min:358.89,max:358.89,mean:358.89}}},poolOverflow:351,upstreamConnections:49},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:4991.13,totalRequests:149734,latency:{min:.391,mean:7.071,max:80.433,pstdev:12.841,percentiles:{p50:3.199,p75:5.005,p80:5.635,p90:8.73,p95:49.813,p99:55.756,p999:61.407}},resources:{envoyGateway:{memory:{min:199.41,max:199.41,mean:199.41},cpu:{min:114.89,max:114.89,mean:114.89}},envoyProxy:{memory:{min:127.44,max:127.44,mean:127.44},cpu:{min:328.33,max:328.33,mean:328.33}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5138.59,totalRequests:154161,latency:{min:.377,mean:6.954,max:86.982,pstdev:13.049,percentiles:{p50:3.045,p75:4.886,p80:5.525,p90:8.466,p95:51.048,p99:56.733,p999:62.337}},resources:{envoyGateway:{memory:{min:219.76,max:219.76,mean:219.76},cpu:{min:113.71,max:113.71,mean:113.71}},envoyProxy:{memory:{min:127.31,max:127.31,mean:127.31},cpu:{min:297.73,max:297.73,mean:297.73}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5051.68,totalRequests:151551,latency:{min:.389,mean:7.977,max:86.577,pstdev:14.09,percentiles:{p50:3.498,p75:5.731,p80:6.471,p90:10.947,p95:52.355,p99:58.748,p999:67.379}},resources:{envoyGateway:{memory:{min:259.14,max:259.14,mean:259.14},cpu:{min:103.22,max:103.22,mean:103.22}},envoyProxy:{memory:{min:127.31,max:127.31,mean:127.31},cpu:{min:265.59,max:265.59,mean:265.59}}},poolOverflow:357,upstreamConnections:43},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:4962.4,totalRequests:148872,latency:{min:.384,mean:7.209,max:110.186,pstdev:13.357,percentiles:{p50:3.112,p75:5.018,p80:5.694,p90:9.338,p95:51.267,p99:57.384,p999:67.244}},resources:{envoyGateway:{memory:{min:177.76,max:177.76,mean:177.76},cpu:{min:91.86,max:91.86,mean:91.86}},envoyProxy:{memory:{min:127.24,max:127.24,mean:127.24},cpu:{min:233.07,max:233.07,mean:233.07}}},poolOverflow:362,upstreamConnections:38}]},rse={metadata:{version:"1.3.1",runId:"1.3.1-1750189826775",date:"2025-03-05",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5115.35,totalRequests:153465,latency:{min:.389,mean:6.604,max:74.543,pstdev:11.843,percentiles:{p50:3.094,p75:5.007,p80:5.671,p90:8.723,p95:46.997,p99:55.033,p999:60.336}},resources:{envoyGateway:{memory:{min:122.23,max:122.23,mean:122.23},cpu:{min:1.04,max:1.04,mean:1.04}},envoyProxy:{memory:{min:25.28,max:25.28,mean:25.28},cpu:{min:30.51,max:30.51,mean:30.51}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5150.43,totalRequests:154513,latency:{min:.386,mean:6.919,max:87.556,pstdev:12.645,percentiles:{p50:3.126,p75:5.009,p80:5.646,p90:8.62,p95:49.58,p99:55.326,p999:60.073}},resources:{envoyGateway:{memory:{min:151.59,max:151.59,mean:151.59},cpu:{min:1.83,max:1.83,mean:1.83}},envoyProxy:{memory:{min:31.45,max:31.45,mean:31.45},cpu:{min:61.11,max:61.11,mean:61.11}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5211.7,totalRequests:156354,latency:{min:.376,mean:6.687,max:88.604,pstdev:12.657,percentiles:{p50:2.913,p75:4.676,p80:5.309,p90:8.259,p95:49.93,p99:55.853,p999:63.514}},resources:{envoyGateway:{memory:{min:145.61,max:145.61,mean:145.61},cpu:{min:3.19,max:3.19,mean:3.19}},envoyProxy:{memory:{min:35.5,max:35.5,mean:35.5},cpu:{min:91.72,max:91.72,mean:91.72}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5066.99,totalRequests:152016,latency:{min:.386,mean:7.628,max:93.048,pstdev:13.7,percentiles:{p50:3.31,p75:5.414,p80:6.156,p90:10.289,p95:51.75,p99:58.007,p999:66.938}},resources:{envoyGateway:{memory:{min:156.12,max:156.12,mean:156.12},cpu:{min:15.73,max:15.73,mean:15.73}},envoyProxy:{memory:{min:55.56,max:55.56,mean:55.56},cpu:{min:124.54,max:124.54,mean:124.54}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5098.53,totalRequests:152960,latency:{min:.373,mean:7.203,max:108.142,pstdev:13.209,percentiles:{p50:3.161,p75:5.083,p80:5.791,p90:9.292,p95:50.372,p99:56.864,p999:67.85}},resources:{envoyGateway:{memory:{min:181.23,max:181.23,mean:181.23},cpu:{min:28.35,max:28.35,mean:28.35}},envoyProxy:{memory:{min:73.6,max:73.6,mean:73.6},cpu:{min:158.01,max:158.01,mean:158.01}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5048.96,totalRequests:151469,latency:{min:.366,mean:7.462,max:99.799,pstdev:13.676,percentiles:{p50:3.122,p75:5.245,p80:6.05,p90:10.398,p95:50.685,p99:59.639,p999:74.547}},resources:{envoyGateway:{memory:{min:196.57,max:196.57,mean:196.57},cpu:{min:61.62,max:61.62,mean:61.62}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:196.43,max:196.43,mean:196.43}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5116.49,totalRequests:153495,latency:{min:.373,mean:7.373,max:79.749,pstdev:13.231,percentiles:{p50:3.334,p75:5.268,p80:5.935,p90:9.436,p95:50.972,p99:56.68,p999:62.969}},resources:{envoyGateway:{memory:{min:213.36,max:213.36,mean:213.36},cpu:{min:114.56,max:114.56,mean:114.56}},envoyProxy:{memory:{min:109.79,max:109.79,mean:109.79},cpu:{min:357.84,max:357.84,mean:357.84}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5128.63,totalRequests:153859,latency:{min:.38,mean:6.787,max:76.259,pstdev:12.813,percentiles:{p50:2.982,p75:4.725,p80:5.33,p90:8.194,p95:50.354,p99:56.367,p999:61.741}},resources:{envoyGateway:{memory:{min:217.34,max:217.34,mean:217.34},cpu:{min:113.9,max:113.9,mean:113.9}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:327.37,max:327.37,mean:327.37}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5217.06,totalRequests:156516,latency:{min:.386,mean:7.182,max:93.491,pstdev:12.999,percentiles:{p50:3.211,p75:5.188,p80:5.872,p90:9.449,p95:50.083,p99:56.135,p999:63.309}},resources:{envoyGateway:{memory:{min:220.2,max:220.2,mean:220.2},cpu:{min:112.64,max:112.64,mean:112.64}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:296.73,max:296.73,mean:296.73}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5033.4,totalRequests:151002,latency:{min:.38,mean:6.522,max:92.626,pstdev:12.472,percentiles:{p50:2.849,p75:4.643,p80:5.272,p90:8.064,p95:49.35,p99:55.799,p999:64.323}},resources:{envoyGateway:{memory:{min:201.77,max:201.77,mean:201.77},cpu:{min:102.25,max:102.25,mean:102.25}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:264.74,max:264.74,mean:264.74}}},poolOverflow:365,upstreamConnections:35},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5061.34,totalRequests:151843,latency:{min:.393,mean:7.429,max:99.934,pstdev:13.552,percentiles:{p50:3.227,p75:5.18,p80:5.867,p90:9.747,p95:51.32,p99:58.009,p999:68.829}},resources:{envoyGateway:{memory:{min:173.04,max:173.04,mean:173.04},cpu:{min:91.12,max:91.12,mean:91.12}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:231.98,max:231.98,mean:231.98}}},poolOverflow:360,upstreamConnections:40}]},ase={metadata:{version:"1.3.0",runId:"1.3.0-1750189826772",date:"2025-01-31",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5297.23,totalRequests:158917,latency:{min:.371,mean:6.861,max:69.562,pstdev:12.096,percentiles:{p50:3.223,p75:5.219,p80:5.926,p90:9.36,p95:48.029,p99:54.945,p999:60.096}},resources:{envoyGateway:{memory:{min:116.36,max:116.36,mean:116.36},cpu:{min:.77,max:.77,mean:.77}},envoyProxy:{memory:{min:25.3,max:25.3,mean:25.3},cpu:{min:30.42,max:30.42,mean:30.42}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5276.06,totalRequests:158285,latency:{min:.372,mean:6.781,max:81.436,pstdev:12.685,percentiles:{p50:3.035,p75:4.783,p80:5.41,p90:8.21,p95:50.042,p99:55.861,p999:61.739}},resources:{envoyGateway:{memory:{min:135.97,max:135.97,mean:135.97},cpu:{min:1.53,max:1.53,mean:1.53}},envoyProxy:{memory:{min:31.45,max:31.45,mean:31.45},cpu:{min:60.97,max:60.97,mean:60.97}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5248.15,totalRequests:157445,latency:{min:.386,mean:6.832,max:83.939,pstdev:12.879,percentiles:{p50:2.957,p75:4.826,p80:5.504,p90:8.587,p95:50.454,p99:56.524,p999:63.15}},resources:{envoyGateway:{memory:{min:128.67,max:128.67,mean:128.67},cpu:{min:2.88,max:2.88,mean:2.88}},envoyProxy:{memory:{min:35.62,max:35.62,mean:35.62},cpu:{min:91.69,max:91.69,mean:91.69}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5190.05,totalRequests:155708,latency:{min:.374,mean:6.735,max:105.82,pstdev:12.667,percentiles:{p50:2.997,p75:4.715,p80:5.323,p90:8.205,p95:49.692,p99:56.199,p999:64.403}},resources:{envoyGateway:{memory:{min:147.27,max:147.27,mean:147.27},cpu:{min:15.8,max:15.8,mean:15.8}},envoyProxy:{memory:{min:61.52,max:61.52,mean:61.52},cpu:{min:124.52,max:124.52,mean:124.52}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5171.63,totalRequests:155149,latency:{min:.345,mean:7.139,max:89.923,pstdev:13.21,percentiles:{p50:3.191,p75:5.039,p80:5.68,p90:8.824,p95:50.767,p99:57.397,p999:67.665}},resources:{envoyGateway:{memory:{min:158.88,max:158.88,mean:158.88},cpu:{min:28.37,max:28.37,mean:28.37}},envoyProxy:{memory:{min:76,max:76,mean:76},cpu:{min:157.59,max:157.59,mean:157.59}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:4998.06,totalRequests:149944,latency:{min:.371,mean:6.95,max:98.525,pstdev:13.111,percentiles:{p50:3.057,p75:4.816,p80:5.416,p90:8.383,p95:50.27,p99:57.946,p999:69.038}},resources:{envoyGateway:{memory:{min:182.71,max:182.71,mean:182.71},cpu:{min:61.79,max:61.79,mean:61.79}},envoyProxy:{memory:{min:122.12,max:122.12,mean:122.12},cpu:{min:194.7,max:194.7,mean:194.7}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5224.35,totalRequests:156731,latency:{min:.376,mean:6.87,max:73.203,pstdev:12.827,percentiles:{p50:3.06,p75:4.817,p80:5.428,p90:8.28,p95:50.618,p99:56.178,p999:61.28}},resources:{envoyGateway:{memory:{min:209.85,max:209.85,mean:209.85},cpu:{min:114.89,max:114.89,mean:114.89}},envoyProxy:{memory:{min:110.5,max:110.5,mean:110.5},cpu:{min:356.13,max:356.13,mean:356.13}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5247.75,totalRequests:157436,latency:{min:.383,mean:6.991,max:88.027,pstdev:12.998,percentiles:{p50:3.091,p75:4.901,p80:5.532,p90:8.568,p95:50.655,p99:56.272,p999:62.16}},resources:{envoyGateway:{memory:{min:208.95,max:208.95,mean:208.95},cpu:{min:114.35,max:114.35,mean:114.35}},envoyProxy:{memory:{min:122.19,max:122.19,mean:122.19},cpu:{min:325.78,max:325.78,mean:325.78}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5201.69,totalRequests:156051,latency:{min:.38,mean:7.027,max:78.663,pstdev:12.995,percentiles:{p50:3.129,p75:4.963,p80:5.6,p90:8.642,p95:50.726,p99:56.254,p999:61.509}},resources:{envoyGateway:{memory:{min:211.34,max:211.34,mean:211.34},cpu:{min:113.23,max:113.23,mean:113.23}},envoyProxy:{memory:{min:122.17,max:122.17,mean:122.17},cpu:{min:295.15,max:295.15,mean:295.15}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5206.95,totalRequests:156214,latency:{min:.386,mean:6.893,max:92.049,pstdev:12.874,percentiles:{p50:3.088,p75:4.898,p80:5.548,p90:8.444,p95:50.268,p99:56.334,p999:65.038}},resources:{envoyGateway:{memory:{min:158.73,max:158.73,mean:158.73},cpu:{min:102.79,max:102.79,mean:102.79}},envoyProxy:{memory:{min:122.15,max:122.15,mean:122.15},cpu:{min:263,max:263,mean:263}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5150.23,totalRequests:154507,latency:{min:.375,mean:6.786,max:84.877,pstdev:12.812,percentiles:{p50:3.009,p75:4.734,p80:5.34,p90:8.236,p95:50.247,p99:56.647,p999:65.042}},resources:{envoyGateway:{memory:{min:168.04,max:168.04,mean:168.04},cpu:{min:91.51,max:91.51,mean:91.51}},envoyProxy:{memory:{min:122.14,max:122.14,mean:122.14},cpu:{min:230.49,max:230.49,mean:230.49}}},poolOverflow:363,upstreamConnections:37}]},ose={metadata:{version:"1.2.8",runId:"1.2.8-1750189826771",date:"2025-03-25",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.8",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.8/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5878.23,totalRequests:176347,latency:{min:.376,mean:9.154,max:75.661,pstdev:14.181,percentiles:{p50:4.294,p75:7.182,p80:8.292,p90:22.716,p95:52.056,p99:58.071,p999:64.841}},resources:{envoyGateway:{memory:{min:108.89,max:108.89,mean:108.89},cpu:{min:.77,max:.77,mean:.77}},envoyProxy:{memory:{min:28.23,max:28.23,mean:28.23},cpu:{min:30.48,max:30.48,mean:30.48}}},poolOverflow:342,upstreamConnections:58},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5582.21,totalRequests:167469,latency:{min:.359,mean:6.378,max:69.967,pstdev:12.106,percentiles:{p50:2.864,p75:4.529,p80:5.113,p90:7.717,p95:48.431,p99:54.521,p999:59.967}},resources:{envoyGateway:{memory:{min:132.62,max:132.62,mean:132.62},cpu:{min:1.54,max:1.54,mean:1.54}},envoyProxy:{memory:{min:32.39,max:32.39,mean:32.39},cpu:{min:60.99,max:60.99,mean:60.99}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5454.1,totalRequests:163623,latency:{min:.368,mean:6.738,max:72.437,pstdev:12.216,percentiles:{p50:3.318,p75:5.037,p80:5.581,p90:8.092,p95:47.886,p99:53.829,p999:60.2}},resources:{envoyGateway:{memory:{min:135.66,max:135.66,mean:135.66},cpu:{min:2.91,max:2.91,mean:2.91}},envoyProxy:{memory:{min:38.6,max:38.6,mean:38.6},cpu:{min:91.91,max:91.91,mean:91.91}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5496.5,totalRequests:164898,latency:{min:.375,mean:6.453,max:103.043,pstdev:12.191,percentiles:{p50:2.887,p75:4.603,p80:5.209,p90:7.967,p95:48.15,p99:54.63,p999:63.743}},resources:{envoyGateway:{memory:{min:147.15,max:147.15,mean:147.15},cpu:{min:15.47,max:15.47,mean:15.47}},envoyProxy:{memory:{min:60.75,max:60.75,mean:60.75},cpu:{min:125.31,max:125.31,mean:125.31}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5351.8,totalRequests:160554,latency:{min:.377,mean:6.516,max:93.298,pstdev:12.549,percentiles:{p50:2.857,p75:4.496,p80:5.076,p90:7.615,p95:49.512,p99:55.822,p999:65.318}},resources:{envoyGateway:{memory:{min:155.79,max:155.79,mean:155.79},cpu:{min:28.01,max:28.01,mean:28.01}},envoyProxy:{memory:{min:82.96,max:82.96,mean:82.96},cpu:{min:159.29,max:159.29,mean:159.29}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5102.69,totalRequests:153086,latency:{min:.358,mean:6.968,max:108.298,pstdev:13.304,percentiles:{p50:2.979,p75:4.802,p80:5.441,p90:8.343,p95:50.37,p99:60.203,p999:71.446}},resources:{envoyGateway:{memory:{min:190.03,max:190.03,mean:190.03},cpu:{min:61.69,max:61.69,mean:61.69}},envoyProxy:{memory:{min:133.22,max:133.22,mean:133.22},cpu:{min:199.84,max:199.84,mean:199.84}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5424.03,totalRequests:162721,latency:{min:.362,mean:6.57,max:73.609,pstdev:12.562,percentiles:{p50:2.923,p75:4.626,p80:5.209,p90:7.751,p95:49.96,p99:55.525,p999:60.127}},resources:{envoyGateway:{memory:{min:127.89,max:127.89,mean:127.89},cpu:{min:114.69,max:114.69,mean:114.69}},envoyProxy:{memory:{min:112.11,max:112.11,mean:112.11},cpu:{min:363.01,max:363.01,mean:363.01}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5454.96,totalRequests:163653,latency:{min:.363,mean:6.397,max:73.404,pstdev:12.347,percentiles:{p50:2.884,p75:4.452,p80:4.989,p90:7.3,p95:49.477,p99:55.369,p999:61.495}},resources:{envoyGateway:{memory:{min:136.28,max:136.28,mean:136.28},cpu:{min:114.05,max:114.05,mean:114.05}},envoyProxy:{memory:{min:114.79,max:114.79,mean:114.79},cpu:{min:332.54,max:332.54,mean:332.54}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5402.5,totalRequests:162075,latency:{min:.366,mean:6.575,max:127.266,pstdev:12.484,percentiles:{p50:2.94,p75:4.6,p80:5.162,p90:7.727,p95:49.549,p99:55.334,p999:61.478}},resources:{envoyGateway:{memory:{min:140.91,max:140.91,mean:140.91},cpu:{min:112.87,max:112.87,mean:112.87}},envoyProxy:{memory:{min:114.76,max:114.76,mean:114.76},cpu:{min:301.85,max:301.85,mean:301.85}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5498.81,totalRequests:164969,latency:{min:.349,mean:6.325,max:84.213,pstdev:12.296,percentiles:{p50:2.789,p75:4.396,p80:4.944,p90:7.293,p95:48.961,p99:55.212,p999:65.019}},resources:{envoyGateway:{memory:{min:148.36,max:148.36,mean:148.36},cpu:{min:102.53,max:102.53,mean:102.53}},envoyProxy:{memory:{min:133.35,max:133.35,mean:133.35},cpu:{min:269.43,max:269.43,mean:269.43}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5308.76,totalRequests:159263,latency:{min:.361,mean:6.727,max:98.807,pstdev:12.828,percentiles:{p50:2.916,p75:4.65,p80:5.273,p90:8.161,p95:49.971,p99:56.84,p999:67.182}},resources:{envoyGateway:{memory:{min:157.93,max:157.93,mean:157.93},cpu:{min:91.26,max:91.26,mean:91.26}},envoyProxy:{memory:{min:133.2,max:133.2,mean:133.2},cpu:{min:236.02,max:236.02,mean:236.02}}},poolOverflow:362,upstreamConnections:38}]},ise={metadata:{version:"1.2.7",runId:"1.2.7-1750189826769",date:"2025-03-06",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.7",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.7/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5984.83,totalRequests:179545,latency:{min:.402,mean:12.033,max:92.835,pstdev:16.725,percentiles:{p50:5.655,p75:9.809,p80:11.804,p90:49.971,p95:55.76,p99:64.241,p999:73.961}},resources:{envoyGateway:{memory:{min:112.35,max:112.35,mean:112.35},cpu:{min:.76,max:.76,mean:.76}},envoyProxy:{memory:{min:28.29,max:28.29,mean:28.29},cpu:{min:30.49,max:30.49,mean:30.49}}},poolOverflow:323,upstreamConnections:77},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5564.85,totalRequests:166949,latency:{min:.362,mean:6.416,max:73.261,pstdev:12.268,percentiles:{p50:2.855,p75:4.514,p80:5.094,p90:7.66,p95:49.031,p99:54.939,p999:60.436}},resources:{envoyGateway:{memory:{min:125.94,max:125.94,mean:125.94},cpu:{min:1.52,max:1.52,mean:1.52}},envoyProxy:{memory:{min:34.46,max:34.46,mean:34.46},cpu:{min:61.11,max:61.11,mean:61.11}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5618.23,totalRequests:168547,latency:{min:.372,mean:6.834,max:85.766,pstdev:12.643,percentiles:{p50:3.107,p75:4.954,p80:5.56,p90:8.454,p95:49.485,p99:55.513,p999:61.272}},resources:{envoyGateway:{memory:{min:132.05,max:132.05,mean:132.05},cpu:{min:2.92,max:2.92,mean:2.92}},envoyProxy:{memory:{min:40.63,max:40.63,mean:40.63},cpu:{min:92.02,max:92.02,mean:92.02}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5506.26,totalRequests:165193,latency:{min:.383,mean:6.67,max:85.905,pstdev:12.677,percentiles:{p50:2.946,p75:4.659,p80:5.243,p90:7.891,p95:49.846,p99:56.096,p999:65.185}},resources:{envoyGateway:{memory:{min:146.09,max:146.09,mean:146.09},cpu:{min:15.43,max:15.43,mean:15.43}},envoyProxy:{memory:{min:62.86,max:62.86,mean:62.86},cpu:{min:125.21,max:125.21,mean:125.21}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5580.92,totalRequests:167428,latency:{min:.31,mean:6.716,max:89.178,pstdev:12.233,percentiles:{p50:3.157,p75:4.861,p80:5.446,p90:8.231,p95:47.419,p99:54.634,p999:65.587}},resources:{envoyGateway:{memory:{min:163.49,max:163.49,mean:163.49},cpu:{min:28.15,max:28.15,mean:28.15}},envoyProxy:{memory:{min:83.07,max:83.07,mean:83.07},cpu:{min:159.15,max:159.15,mean:159.15}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5298.3,totalRequests:158951,latency:{min:.369,mean:6.537,max:122.015,pstdev:12.654,percentiles:{p50:2.914,p75:4.472,p80:5.012,p90:7.402,p95:48.639,p99:58.097,p999:69.103}},resources:{envoyGateway:{memory:{min:187.81,max:187.81,mean:187.81},cpu:{min:62.41,max:62.41,mean:62.41}},envoyProxy:{memory:{min:133.27,max:133.27,mean:133.27},cpu:{min:199.13,max:199.13,mean:199.13}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5623.57,totalRequests:168711,latency:{min:.38,mean:7.19,max:75.063,pstdev:13.103,percentiles:{p50:3.211,p75:5.102,p80:5.772,p90:9.144,p95:50.722,p99:56.26,p999:61.515}},resources:{envoyGateway:{memory:{min:132.38,max:132.38,mean:132.38},cpu:{min:116.08,max:116.08,mean:116.08}},envoyProxy:{memory:{min:128.69,max:128.69,mean:128.69},cpu:{min:362.3,max:362.3,mean:362.3}}},poolOverflow:357,upstreamConnections:43},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5516.59,totalRequests:165498,latency:{min:.329,mean:6.044,max:69.902,pstdev:11.632,percentiles:{p50:2.893,p75:4.337,p80:4.79,p90:6.742,p95:47.155,p99:53.372,p999:58.073}},resources:{envoyGateway:{memory:{min:144.02,max:144.02,mean:144.02},cpu:{min:115.5,max:115.5,mean:115.5}},envoyProxy:{memory:{min:129.14,max:129.14,mean:129.14},cpu:{min:331.76,max:331.76,mean:331.76}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5515.82,totalRequests:165475,latency:{min:.38,mean:6.483,max:79.159,pstdev:12.363,percentiles:{p50:2.872,p75:4.545,p80:5.131,p90:7.76,p95:49.19,p99:55.408,p999:61.89}},resources:{envoyGateway:{memory:{min:135.79,max:135.79,mean:135.79},cpu:{min:114.36,max:114.36,mean:114.36}},envoyProxy:{memory:{min:109,max:109,mean:109},cpu:{min:301.13,max:301.13,mean:301.13}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5403.53,totalRequests:162106,latency:{min:.354,mean:6.429,max:83.423,pstdev:12.305,percentiles:{p50:2.864,p75:4.496,p80:5.072,p90:7.504,p95:48.885,p99:55.414,p999:63.565}},resources:{envoyGateway:{memory:{min:155.42,max:155.42,mean:155.42},cpu:{min:103.9,max:103.9,mean:103.9}},envoyProxy:{memory:{min:133.59,max:133.59,mean:133.59},cpu:{min:268.85,max:268.85,mean:268.85}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5405.24,totalRequests:162162,latency:{min:.387,mean:6.615,max:90.812,pstdev:12.66,percentiles:{p50:2.913,p75:4.593,p80:5.174,p90:7.866,p95:49.461,p99:56.51,p999:67.248}},resources:{envoyGateway:{memory:{min:165.58,max:165.58,mean:165.58},cpu:{min:92.35,max:92.35,mean:92.35}},envoyProxy:{memory:{min:133.42,max:133.42,mean:133.42},cpu:{min:235.87,max:235.87,mean:235.87}}},poolOverflow:362,upstreamConnections:38}]},sse={metadata:{version:"1.2.6",runId:"1.2.6-1750189826767",date:"2025-01-23",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.6",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.6/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5668.03,totalRequests:170041,latency:{min:.354,mean:6.713,max:73.658,pstdev:11.906,percentiles:{p50:3.142,p75:5.17,p80:5.865,p90:9.278,p95:47.425,p99:54.87,p999:59.602}},resources:{envoyGateway:{memory:{min:108.82,max:108.82,mean:108.82},cpu:{min:.76,max:.76,mean:.76}},envoyProxy:{memory:{min:25.38,max:25.38,mean:25.38},cpu:{min:30.51,max:30.51,mean:30.51}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5542.06,totalRequests:166262,latency:{min:.38,mean:6.117,max:73.658,pstdev:11.949,percentiles:{p50:2.749,p75:4.31,p80:4.842,p90:7.067,p95:48.484,p99:54.499,p999:59.725}},resources:{envoyGateway:{memory:{min:135.08,max:135.08,mean:135.08},cpu:{min:1.53,max:1.53,mean:1.53}},envoyProxy:{memory:{min:31.53,max:31.53,mean:31.53},cpu:{min:61.17,max:61.17,mean:61.17}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5556.06,totalRequests:166682,latency:{min:.363,mean:6.439,max:100.163,pstdev:12.297,percentiles:{p50:2.891,p75:4.506,p80:5.05,p90:7.595,p95:49.078,p99:54.935,p999:60.456}},resources:{envoyGateway:{memory:{min:140.09,max:140.09,mean:140.09},cpu:{min:2.88,max:2.88,mean:2.88}},envoyProxy:{memory:{min:37.7,max:37.7,mean:37.7},cpu:{min:91.98,max:91.98,mean:91.98}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5462.58,totalRequests:163882,latency:{min:.372,mean:6.376,max:78.544,pstdev:12.289,percentiles:{p50:2.853,p75:4.454,p80:5.002,p90:7.458,p95:49.076,p99:55.132,p999:63.879}},resources:{envoyGateway:{memory:{min:146.71,max:146.71,mean:146.71},cpu:{min:15.64,max:15.64,mean:15.64}},envoyProxy:{memory:{min:59.89,max:59.89,mean:59.89},cpu:{min:125.41,max:125.41,mean:125.41}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5427.5,totalRequests:162825,latency:{min:.359,mean:6.562,max:97.148,pstdev:12.598,percentiles:{p50:2.881,p75:4.518,p80:5.091,p90:7.774,p95:49.301,p99:56.102,p999:67.338}},resources:{envoyGateway:{memory:{min:155.26,max:155.26,mean:155.26},cpu:{min:28.52,max:28.52,mean:28.52}},envoyProxy:{memory:{min:82.08,max:82.08,mean:82.08},cpu:{min:159.72,max:159.72,mean:159.72}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5261.62,totalRequests:157849,latency:{min:.373,mean:6.972,max:115.06,pstdev:13.251,percentiles:{p50:3.015,p75:4.77,p80:5.385,p90:8.293,p95:50.296,p99:59.93,p999:70.59}},resources:{envoyGateway:{memory:{min:188.13,max:188.13,mean:188.13},cpu:{min:61.78,max:61.78,mean:61.78}},envoyProxy:{memory:{min:130.35,max:130.35,mean:130.35},cpu:{min:199.1,max:199.1,mean:199.1}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5543.17,totalRequests:166299,latency:{min:.36,mean:6.447,max:75.276,pstdev:12.396,percentiles:{p50:2.866,p75:4.486,p80:5.04,p90:7.527,p95:49.663,p99:55.24,p999:60.647}},resources:{envoyGateway:{memory:{min:129.36,max:129.36,mean:129.36},cpu:{min:115.21,max:115.21,mean:115.21}},envoyProxy:{memory:{min:122.58,max:122.58,mean:122.58},cpu:{min:362.6,max:362.6,mean:362.6}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5522.73,totalRequests:165682,latency:{min:.384,mean:6.098,max:68.321,pstdev:11.922,percentiles:{p50:2.776,p75:4.326,p80:4.838,p90:6.958,p95:48.431,p99:54.296,p999:58.857}},resources:{envoyGateway:{memory:{min:140.97,max:140.97,mean:140.97},cpu:{min:114.57,max:114.57,mean:114.57}},envoyProxy:{memory:{min:122.83,max:122.83,mean:122.83},cpu:{min:332.12,max:332.12,mean:332.12}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5500.66,totalRequests:165023,latency:{min:.36,mean:6.301,max:80.4,pstdev:12.064,percentiles:{p50:2.833,p75:4.483,p80:5.035,p90:7.574,p95:48.777,p99:54.876,p999:60.85}},resources:{envoyGateway:{memory:{min:132.45,max:132.45,mean:132.45},cpu:{min:113.5,max:113.5,mean:113.5}},envoyProxy:{memory:{min:122.84,max:122.84,mean:122.84},cpu:{min:301.26,max:301.26,mean:301.26}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5453.33,totalRequests:163603,latency:{min:.357,mean:6.324,max:86.024,pstdev:12.138,percentiles:{p50:2.842,p75:4.429,p80:4.967,p90:7.393,p95:48.201,p99:54.683,p999:65.251}},resources:{envoyGateway:{memory:{min:150.62,max:150.62,mean:150.62},cpu:{min:103.11,max:103.11,mean:103.11}},envoyProxy:{memory:{min:130.34,max:130.34,mean:130.34},cpu:{min:269.03,max:269.03,mean:269.03}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5402.96,totalRequests:162089,latency:{min:.371,mean:6.575,max:90.804,pstdev:12.621,percentiles:{p50:2.877,p75:4.543,p80:5.114,p90:7.832,p95:49.375,p99:56.092,p999:69.132}},resources:{envoyGateway:{memory:{min:159.25,max:159.25,mean:159.25},cpu:{min:91.66,max:91.66,mean:91.66}},envoyProxy:{memory:{min:130.34,max:130.34,mean:130.34},cpu:{min:235.83,max:235.83,mean:235.83}}},poolOverflow:362,upstreamConnections:38}]},use={metadata:{version:"1.2.5",runId:"1.2.5-1750189826766",date:"2025-01-14",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.5",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.5/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5704.46,totalRequests:171136,latency:{min:.37,mean:6.52,max:74.477,pstdev:11.781,percentiles:{p50:3.051,p75:4.913,p80:5.565,p90:8.7,p95:47.091,p99:54.638,p999:59.404}},resources:{envoyGateway:{memory:{min:112.07,max:112.07,mean:112.07},cpu:{min:.76,max:.76,mean:.76}},envoyProxy:{memory:{min:24.38,max:24.38,mean:24.38},cpu:{min:30.47,max:30.47,mean:30.47}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5647.86,totalRequests:169439,latency:{min:.379,mean:6.313,max:80.498,pstdev:11.935,percentiles:{p50:2.854,p75:4.55,p80:5.158,p90:7.82,p95:48.025,p99:54.39,p999:60.321}},resources:{envoyGateway:{memory:{min:123.4,max:123.4,mean:123.4},cpu:{min:1.48,max:1.48,mean:1.48}},envoyProxy:{memory:{min:30.55,max:30.55,mean:30.55},cpu:{min:61.09,max:61.09,mean:61.09}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5529.29,totalRequests:165879,latency:{min:.379,mean:6.24,max:73.539,pstdev:12.017,percentiles:{p50:2.818,p75:4.51,p80:5.068,p90:7.413,p95:48.3,p99:54.171,p999:59.308}},resources:{envoyGateway:{memory:{min:139.7,max:139.7,mean:139.7},cpu:{min:2.92,max:2.92,mean:2.92}},envoyProxy:{memory:{min:36.73,max:36.73,mean:36.73},cpu:{min:91.9,max:91.9,mean:91.9}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5542.3,totalRequests:166274,latency:{min:.365,mean:6.463,max:81.305,pstdev:12.357,percentiles:{p50:2.89,p75:4.545,p80:5.116,p90:7.585,p95:49.043,p99:55.365,p999:64.399}},resources:{envoyGateway:{memory:{min:146.11,max:146.11,mean:146.11},cpu:{min:15.2,max:15.2,mean:15.2}},envoyProxy:{memory:{min:58.91,max:58.91,mean:58.91},cpu:{min:124.96,max:124.96,mean:124.96}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5407.59,totalRequests:162228,latency:{min:.363,mean:6.396,max:88.236,pstdev:12.419,percentiles:{p50:2.816,p75:4.45,p80:5.012,p90:7.485,p95:48.762,p99:55.666,p999:67.457}},resources:{envoyGateway:{memory:{min:154.01,max:154.01,mean:154.01},cpu:{min:27.98,max:27.98,mean:27.98}},envoyProxy:{memory:{min:81.11,max:81.11,mean:81.11},cpu:{min:158.85,max:158.85,mean:158.85}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5247.32,totalRequests:157425,latency:{min:.374,mean:6.604,max:106.491,pstdev:12.903,percentiles:{p50:2.88,p75:4.514,p80:5.089,p90:7.639,p95:49.453,p99:58.75,p999:71.97}},resources:{envoyGateway:{memory:{min:183.52,max:183.52,mean:183.52},cpu:{min:61.85,max:61.85,mean:61.85}},envoyProxy:{memory:{min:129.33,max:129.33,mean:129.33},cpu:{min:198.98,max:198.98,mean:198.98}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5668.05,totalRequests:170048,latency:{min:.366,mean:6.143,max:73.551,pstdev:12.054,percentiles:{p50:2.726,p75:4.279,p80:4.799,p90:7.123,p95:48.988,p99:54.704,p999:58.812}},resources:{envoyGateway:{memory:{min:138.57,max:138.57,mean:138.57},cpu:{min:115.2,max:115.2,mean:115.2}},envoyProxy:{memory:{min:121.88,max:121.88,mean:121.88},cpu:{min:361.89,max:361.89,mean:361.89}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5579.16,totalRequests:167375,latency:{min:.353,mean:6.19,max:87.244,pstdev:12.028,percentiles:{p50:2.803,p75:4.357,p80:4.889,p90:7.11,p95:48.482,p99:54.329,p999:59.113}},resources:{envoyGateway:{memory:{min:132.83,max:132.83,mean:132.83},cpu:{min:114.63,max:114.63,mean:114.63}},envoyProxy:{memory:{min:122.16,max:122.16,mean:122.16},cpu:{min:331.47,max:331.47,mean:331.47}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5581.7,totalRequests:167453,latency:{min:.377,mean:6.525,max:72.724,pstdev:12.286,percentiles:{p50:2.929,p75:4.641,p80:5.219,p90:7.915,p95:48.732,p99:54.81,p999:61.45}},resources:{envoyGateway:{memory:{min:133.91,max:133.91,mean:133.91},cpu:{min:113.44,max:113.44,mean:113.44}},envoyProxy:{memory:{min:122.02,max:122.02,mean:122.02},cpu:{min:300.79,max:300.79,mean:300.79}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5447.53,totalRequests:163426,latency:{min:.368,mean:6.54,max:88.612,pstdev:12.451,percentiles:{p50:2.904,p75:4.546,p80:5.128,p90:7.692,p95:49.305,p99:55.422,p999:64.116}},resources:{envoyGateway:{memory:{min:145.28,max:145.28,mean:145.28},cpu:{min:102.98,max:102.98,mean:102.98}},envoyProxy:{memory:{min:129.93,max:129.93,mean:129.93},cpu:{min:268.5,max:268.5,mean:268.5}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5437.61,totalRequests:163132,latency:{min:.383,mean:6.527,max:102.998,pstdev:12.6,percentiles:{p50:2.827,p75:4.47,p80:5.07,p90:7.714,p95:49.029,p99:56.436,p999:66.684}},resources:{envoyGateway:{memory:{min:164.07,max:164.07,mean:164.07},cpu:{min:91.64,max:91.64,mean:91.64}},envoyProxy:{memory:{min:129.93,max:129.93,mean:129.93},cpu:{min:235.61,max:235.61,mean:235.61}}},poolOverflow:362,upstreamConnections:38}]},lse={metadata:{version:"1.2.4",runId:"1.2.4-1750189826764",date:"2024-12-13",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.4",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.4/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5982.38,totalRequests:179472,latency:{min:.349,mean:6.011,max:83.349,pstdev:11.061,percentiles:{p50:2.829,p75:4.477,p80:5.098,p90:7.842,p95:43.255,p99:53.35,p999:59.346}},resources:{envoyGateway:{memory:{min:110.54,max:110.54,mean:110.54},cpu:{min:.77,max:.77,mean:.77}},envoyProxy:{memory:{min:24.25,max:24.25,mean:24.25},cpu:{min:30.44,max:30.44,mean:30.44}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5917.46,totalRequests:177524,latency:{min:.361,mean:6.164,max:70.909,pstdev:11.809,percentiles:{p50:2.843,p75:4.366,p80:4.876,p90:7.109,p95:47.788,p99:54.372,p999:59.932}},resources:{envoyGateway:{memory:{min:119.89,max:119.89,mean:119.89},cpu:{min:1.61,max:1.61,mean:1.61}},envoyProxy:{memory:{min:30.43,max:30.43,mean:30.43},cpu:{min:61.13,max:61.13,mean:61.13}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5930.25,totalRequests:177910,latency:{min:.398,mean:6.027,max:92.041,pstdev:11.76,percentiles:{p50:2.652,p75:4.198,p80:4.747,p90:7.135,p95:47.513,p99:55.083,p999:61.542}},resources:{envoyGateway:{memory:{min:129.08,max:129.08,mean:129.08},cpu:{min:3.05,max:3.05,mean:3.05}},envoyProxy:{memory:{min:36.57,max:36.57,mean:36.57},cpu:{min:92.01,max:92.01,mean:92.01}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5612.73,totalRequests:168382,latency:{min:.368,mean:6.361,max:108.085,pstdev:12.378,percentiles:{p50:2.817,p75:4.383,p80:4.929,p90:7.356,p95:48.795,p99:56.586,p999:68.399}},resources:{envoyGateway:{memory:{min:140.63,max:140.63,mean:140.63},cpu:{min:15.35,max:15.35,mean:15.35}},envoyProxy:{memory:{min:58.77,max:58.77,mean:58.77},cpu:{min:125.44,max:125.44,mean:125.44}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5799.01,totalRequests:173974,latency:{min:.378,mean:6.166,max:97.771,pstdev:11.964,percentiles:{p50:2.818,p75:4.251,p80:4.742,p90:6.922,p95:47.56,p99:55.281,p999:68.112}},resources:{envoyGateway:{memory:{min:152.5,max:152.5,mean:152.5},cpu:{min:28.38,max:28.38,mean:28.38}},envoyProxy:{memory:{min:78.94,max:78.94,mean:78.94},cpu:{min:159.67,max:159.67,mean:159.67}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5474.43,totalRequests:164233,latency:{min:.386,mean:6.534,max:109.809,pstdev:12.936,percentiles:{p50:2.656,p75:4.361,p80:5.013,p90:8.074,p95:49.516,p99:60.213,p999:73.678}},resources:{envoyGateway:{memory:{min:183.98,max:183.98,mean:183.98},cpu:{min:62.29,max:62.29,mean:62.29}},envoyProxy:{memory:{min:131.16,max:131.16,mean:131.16},cpu:{min:200.46,max:200.46,mean:200.46}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5816.39,totalRequests:174492,latency:{min:.34,mean:6.131,max:85.209,pstdev:11.868,percentiles:{p50:2.73,p75:4.264,p80:4.816,p90:7.369,p95:47.933,p99:54.984,p999:61.82}},resources:{envoyGateway:{memory:{min:195,max:195,mean:195},cpu:{min:116.53,max:116.53,mean:116.53}},envoyProxy:{memory:{min:120.37,max:120.37,mean:120.37},cpu:{min:363.61,max:363.61,mean:363.61}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5848.8,totalRequests:175470,latency:{min:.372,mean:6.285,max:77.979,pstdev:12.136,percentiles:{p50:2.76,p75:4.334,p80:4.906,p90:7.492,p95:48.553,p99:55.732,p999:63.037}},resources:{envoyGateway:{memory:{min:205.2,max:205.2,mean:205.2},cpu:{min:115.88,max:115.88,mean:115.88}},envoyProxy:{memory:{min:120.26,max:120.26,mean:120.26},cpu:{min:333.06,max:333.06,mean:333.06}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5897.55,totalRequests:176927,latency:{min:.365,mean:6.054,max:78.041,pstdev:11.77,percentiles:{p50:2.761,p75:4.253,p80:4.77,p90:6.934,p95:47.628,p99:54.935,p999:62.232}},resources:{envoyGateway:{memory:{min:201.78,max:201.78,mean:201.78},cpu:{min:114.84,max:114.84,mean:114.84}},envoyProxy:{memory:{min:122.23,max:122.23,mean:122.23},cpu:{min:302.66,max:302.66,mean:302.66}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5764.69,totalRequests:172941,latency:{min:.376,mean:6.54,max:87.822,pstdev:12.528,percentiles:{p50:2.847,p75:4.511,p80:5.118,p90:7.907,p95:49.336,p99:56.737,p999:66.895}},resources:{envoyGateway:{memory:{min:237.36,max:237.36,mean:237.36},cpu:{min:104.3,max:104.3,mean:104.3}},envoyProxy:{memory:{min:131.2,max:131.2,mean:131.2},cpu:{min:270.32,max:270.32,mean:270.32}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5709.58,totalRequests:171290,latency:{min:.35,mean:6.172,max:93.663,pstdev:11.978,percentiles:{p50:2.864,p75:4.285,p80:4.782,p90:6.98,p95:47.689,p99:55.115,p999:67.44}},resources:{envoyGateway:{memory:{min:158.41,max:158.41,mean:158.41},cpu:{min:92.69,max:92.69,mean:92.69}},envoyProxy:{memory:{min:131.32,max:131.32,mean:131.32},cpu:{min:236.85,max:236.85,mean:236.85}}},poolOverflow:363,upstreamConnections:37}]},cse={metadata:{version:"1.2.3",runId:"1.2.3-1750189826763",date:"2024-12-02",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.3",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.3/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6222.52,totalRequests:186680,latency:{min:.349,mean:6.177,max:70.643,pstdev:11.464,percentiles:{p50:2.879,p75:4.52,p80:5.082,p90:7.684,p95:46.213,p99:54.147,p999:60.25}},resources:{envoyGateway:{memory:{min:110.2,max:110.2,mean:110.2},cpu:{min:.68,max:.68,mean:.68}},envoyProxy:{memory:{min:25.89,max:25.89,mean:25.89},cpu:{min:30.33,max:30.33,mean:30.33}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6170.38,totalRequests:185112,latency:{min:.37,mean:5.77,max:72.798,pstdev:11.358,percentiles:{p50:2.657,p75:4.054,p80:4.535,p90:6.537,p95:46.632,p99:53.751,p999:59.174}},resources:{envoyGateway:{memory:{min:122.48,max:122.48,mean:122.48},cpu:{min:1.42,max:1.42,mean:1.42}},envoyProxy:{memory:{min:32.05,max:32.05,mean:32.05},cpu:{min:60.88,max:60.88,mean:60.88}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6085.51,totalRequests:182567,latency:{min:.365,mean:5.863,max:84.721,pstdev:11.54,percentiles:{p50:2.605,p75:4.127,p80:4.662,p90:7.048,p95:46.759,p99:54.556,p999:61.736}},resources:{envoyGateway:{memory:{min:131.06,max:131.06,mean:131.06},cpu:{min:2.8,max:2.8,mean:2.8}},envoyProxy:{memory:{min:38.19,max:38.19,mean:38.19},cpu:{min:91.64,max:91.64,mean:91.64}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:6032.83,totalRequests:180985,latency:{min:.362,mean:6.079,max:79.421,pstdev:11.806,percentiles:{p50:2.707,p75:4.272,p80:4.832,p90:7.327,p95:47.441,p99:54.743,p999:65.808}},resources:{envoyGateway:{memory:{min:142.98,max:142.98,mean:142.98},cpu:{min:15.04,max:15.04,mean:15.04}},envoyProxy:{memory:{min:60.39,max:60.39,mean:60.39},cpu:{min:124.47,max:124.47,mean:124.47}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5773.98,totalRequests:173223,latency:{min:.344,mean:6.36,max:79.355,pstdev:12.473,percentiles:{p50:2.707,p75:4.299,p80:4.888,p90:7.643,p95:49.309,p99:57.382,p999:68.141}},resources:{envoyGateway:{memory:{min:160.84,max:160.84,mean:160.84},cpu:{min:27.66,max:27.66,mean:27.66}},envoyProxy:{memory:{min:80.58,max:80.58,mean:80.58},cpu:{min:156.97,max:156.97,mean:156.97}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5776.08,totalRequests:173283,latency:{min:.361,mean:6.194,max:89.714,pstdev:12.241,percentiles:{p50:2.703,p75:4.241,p80:4.791,p90:7.296,p95:47.755,p99:58.537,p999:70.676}},resources:{envoyGateway:{memory:{min:186.49,max:186.49,mean:186.49},cpu:{min:61.39,max:61.39,mean:61.39}},envoyProxy:{memory:{min:130.82,max:130.82,mean:130.82},cpu:{min:196.17,max:196.17,mean:196.17}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6128.86,totalRequests:183866,latency:{min:.351,mean:5.824,max:73.633,pstdev:11.47,percentiles:{p50:2.578,p75:4.038,p80:4.57,p90:6.823,p95:46.927,p99:54.392,p999:60.213}},resources:{envoyGateway:{memory:{min:218.36,max:218.36,mean:218.36},cpu:{min:114.4,max:114.4,mean:114.4}},envoyProxy:{memory:{min:118.8,max:118.8,mean:118.8},cpu:{min:358.03,max:358.03,mean:358.03}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6065.62,totalRequests:181969,latency:{min:.378,mean:5.877,max:82.526,pstdev:11.643,percentiles:{p50:2.588,p75:4.048,p80:4.587,p90:6.876,p95:47.429,p99:54.71,p999:62.111}},resources:{envoyGateway:{memory:{min:222.42,max:222.42,mean:222.42},cpu:{min:113.86,max:113.86,mean:113.86}},envoyProxy:{memory:{min:119.23,max:119.23,mean:119.23},cpu:{min:327.6,max:327.6,mean:327.6}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:6045.71,totalRequests:181360,latency:{min:.388,mean:6.024,max:80.216,pstdev:11.596,percentiles:{p50:2.802,p75:4.253,p80:4.761,p90:6.951,p95:47.183,p99:54.065,p999:59.455}},resources:{envoyGateway:{memory:{min:142.37,max:142.37,mean:142.37},cpu:{min:112.77,max:112.77,mean:112.77}},envoyProxy:{memory:{min:119.54,max:119.54,mean:119.54},cpu:{min:296.95,max:296.95,mean:296.95}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5956.66,totalRequests:178700,latency:{min:.379,mean:6.153,max:85.528,pstdev:12.032,percentiles:{p50:2.64,p75:4.362,p80:4.961,p90:7.625,p95:47.886,p99:55.965,p999:65.695}},resources:{envoyGateway:{memory:{min:148.72,max:148.72,mean:148.72},cpu:{min:102.49,max:102.49,mean:102.49}},envoyProxy:{memory:{min:130.98,max:130.98,mean:130.98},cpu:{min:264.96,max:264.96,mean:264.96}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5958.61,totalRequests:178765,latency:{min:.362,mean:5.967,max:83.48,pstdev:11.671,percentiles:{p50:2.714,p75:4.156,p80:4.658,p90:6.839,p95:46.901,p99:54.601,p999:65.464}},resources:{envoyGateway:{memory:{min:164.87,max:164.87,mean:164.87},cpu:{min:91.25,max:91.25,mean:91.25}},envoyProxy:{memory:{min:130.98,max:130.98,mean:130.98},cpu:{min:231.98,max:231.98,mean:231.98}}},poolOverflow:363,upstreamConnections:37}]},pse={metadata:{version:"1.2.2",runId:"1.2.2-1750189826761",date:"2024-11-28",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.2",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.2/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6249.74,totalRequests:187495,latency:{min:.333,mean:5.937,max:75.075,pstdev:10.895,percentiles:{p50:2.84,p75:4.501,p80:5.077,p90:7.64,p95:41.435,p99:53.243,p999:58.066}},resources:{envoyGateway:{memory:{min:106.26,max:106.26,mean:106.26},cpu:{min:.73,max:.73,mean:.73}},envoyProxy:{memory:{min:26.09,max:26.09,mean:26.09},cpu:{min:30.41,max:30.41,mean:30.41}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6140.58,totalRequests:184222,latency:{min:.373,mean:5.812,max:79.74,pstdev:11.513,percentiles:{p50:2.59,p75:4.071,p80:4.583,p90:6.812,p95:46.811,p99:54.179,p999:61.151}},resources:{envoyGateway:{memory:{min:131.24,max:131.24,mean:131.24},cpu:{min:1.34,max:1.34,mean:1.34}},envoyProxy:{memory:{min:32.26,max:32.26,mean:32.26},cpu:{min:60.74,max:60.74,mean:60.74}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6149.72,totalRequests:184494,latency:{min:.366,mean:5.813,max:89.935,pstdev:11.434,percentiles:{p50:2.637,p75:4.073,p80:4.561,p90:6.68,p95:46.505,p99:53.872,p999:60.348}},resources:{envoyGateway:{memory:{min:133.05,max:133.05,mean:133.05},cpu:{min:2.75,max:2.75,mean:2.75}},envoyProxy:{memory:{min:38.38,max:38.38,mean:38.38},cpu:{min:91.57,max:91.57,mean:91.57}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:6076.78,totalRequests:182305,latency:{min:.361,mean:6.031,max:87.502,pstdev:11.819,percentiles:{p50:2.675,p75:4.203,p80:4.751,p90:7.118,p95:47.147,p99:55.078,p999:67.106}},resources:{envoyGateway:{memory:{min:153.62,max:153.62,mean:153.62},cpu:{min:14.77,max:14.77,mean:14.77}},envoyProxy:{memory:{min:60.45,max:60.45,mean:60.45},cpu:{min:124.04,max:124.04,mean:124.04}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5928.89,totalRequests:177873,latency:{min:.336,mean:6.196,max:85.643,pstdev:12.032,percentiles:{p50:2.803,p75:4.338,p80:4.852,p90:7.143,p95:47.726,p99:55.619,p999:67.78}},resources:{envoyGateway:{memory:{min:145.79,max:145.79,mean:145.79},cpu:{min:27.17,max:27.17,mean:27.17}},envoyProxy:{memory:{min:80.64,max:80.64,mean:80.64},cpu:{min:157.65,max:157.65,mean:157.65}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5843.64,totalRequests:175314,latency:{min:.339,mean:6.452,max:101.912,pstdev:12.482,percentiles:{p50:2.79,p75:4.509,p80:5.136,p90:8.012,p95:47.702,p99:58.542,p999:74.014}},resources:{envoyGateway:{memory:{min:173.7,max:173.7,mean:173.7},cpu:{min:61.12,max:61.12,mean:61.12}},envoyProxy:{memory:{min:130.89,max:130.89,mean:130.89},cpu:{min:195.74,max:195.74,mean:195.74}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6096.9,totalRequests:182907,latency:{min:.365,mean:5.84,max:99.377,pstdev:11.326,percentiles:{p50:2.735,p75:4.188,p80:4.674,p90:6.654,p95:46.344,p99:53.444,p999:58.591}},resources:{envoyGateway:{memory:{min:230.99,max:230.99,mean:230.99},cpu:{min:114.22,max:114.22,mean:114.22}},envoyProxy:{memory:{min:121.56,max:121.56,mean:121.56},cpu:{min:358.71,max:358.71,mean:358.71}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6151.76,totalRequests:184556,latency:{min:.376,mean:5.805,max:84.885,pstdev:11.572,percentiles:{p50:2.52,p75:3.969,p80:4.498,p90:6.842,p95:46.837,p99:54.761,p999:62.57}},resources:{envoyGateway:{memory:{min:233.63,max:233.63,mean:233.63},cpu:{min:113.65,max:113.65,mean:113.65}},envoyProxy:{memory:{min:121.86,max:121.86,mean:121.86},cpu:{min:328.3,max:328.3,mean:328.3}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:6157.53,totalRequests:184729,latency:{min:.379,mean:5.964,max:75.988,pstdev:11.502,percentiles:{p50:2.743,p75:4.204,p80:4.695,p90:6.941,p95:46.497,p99:54.179,p999:62.005}},resources:{envoyGateway:{memory:{min:141.36,max:141.36,mean:141.36},cpu:{min:112.67,max:112.67,mean:112.67}},envoyProxy:{memory:{min:122.04,max:122.04,mean:122.04},cpu:{min:297.59,max:297.59,mean:297.59}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:6060.5,totalRequests:181818,latency:{min:.36,mean:6.022,max:92.483,pstdev:11.657,percentiles:{p50:2.685,p75:4.265,p80:4.811,p90:7.313,p95:46.495,p99:54.495,p999:64.219}},resources:{envoyGateway:{memory:{min:150.71,max:150.71,mean:150.71},cpu:{min:102.4,max:102.4,mean:102.4}},envoyProxy:{memory:{min:130.9,max:130.9,mean:130.9},cpu:{min:265.29,max:265.29,mean:265.29}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5966.83,totalRequests:179008,latency:{min:.343,mean:5.962,max:102.715,pstdev:11.763,percentiles:{p50:2.668,p75:4.125,p80:4.633,p90:6.863,p95:46.741,p99:54.929,p999:67.018}},resources:{envoyGateway:{memory:{min:162.62,max:162.62,mean:162.62},cpu:{min:91.03,max:91.03,mean:91.03}},envoyProxy:{memory:{min:131.05,max:131.05,mean:131.05},cpu:{min:232.55,max:232.55,mean:232.55}}},poolOverflow:363,upstreamConnections:37}]},mse={metadata:{version:"1.2.1",runId:"1.2.1-1750189826759",date:"2024-11-07",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6110.53,totalRequests:183316,latency:{min:.337,mean:6.415,max:92.647,pstdev:11.35,percentiles:{p50:3.107,p75:5.037,p80:5.711,p90:8.782,p95:45.103,p99:53.942,p999:60.79}},resources:{envoyGateway:{memory:{min:111.18,max:111.18,mean:111.18},cpu:{min:.79,max:.79,mean:.79}},envoyProxy:{memory:{min:24.25,max:24.25,mean:24.25},cpu:{min:30.62,max:30.62,mean:30.62}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6011.43,totalRequests:180343,latency:{min:.377,mean:6.244,max:72.724,pstdev:11.87,percentiles:{p50:2.835,p75:4.408,p80:4.939,p90:7.412,p95:47.611,p99:54.769,p999:61.716}},resources:{envoyGateway:{memory:{min:116.45,max:116.45,mean:116.45},cpu:{min:1.59,max:1.59,mean:1.59}},envoyProxy:{memory:{min:30.41,max:30.41,mean:30.41},cpu:{min:61.42,max:61.42,mean:61.42}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5961.65,totalRequests:178854,latency:{min:.37,mean:5.979,max:81.096,pstdev:11.586,percentiles:{p50:2.705,p75:4.189,p80:4.699,p90:7.03,p95:46.987,p99:54.095,p999:61.222}},resources:{envoyGateway:{memory:{min:128.02,max:128.02,mean:128.02},cpu:{min:3.04,max:3.04,mean:3.04}},envoyProxy:{memory:{min:36.55,max:36.55,mean:36.55},cpu:{min:92.49,max:92.49,mean:92.49}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5921.3,totalRequests:177639,latency:{min:.376,mean:6.208,max:100.098,pstdev:11.901,percentiles:{p50:2.77,p75:4.413,p80:5.009,p90:7.647,p95:46.934,p99:55.273,p999:68.509}},resources:{envoyGateway:{memory:{min:144.93,max:144.93,mean:144.93},cpu:{min:15.11,max:15.11,mean:15.11}},envoyProxy:{memory:{min:58.75,max:58.75,mean:58.75},cpu:{min:125.9,max:125.9,mean:125.9}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5876.24,totalRequests:176290,latency:{min:.365,mean:6.248,max:80.101,pstdev:12.134,percentiles:{p50:2.759,p75:4.348,p80:4.922,p90:7.422,p95:47.855,p99:56.041,p999:67.145}},resources:{envoyGateway:{memory:{min:155.94,max:155.94,mean:155.94},cpu:{min:27.72,max:27.72,mean:27.72}},envoyProxy:{memory:{min:80.95,max:80.95,mean:80.95},cpu:{min:159.58,max:159.58,mean:159.58}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5744.1,totalRequests:172323,latency:{min:.38,mean:6.374,max:100.245,pstdev:12.424,percentiles:{p50:2.775,p75:4.337,p80:4.899,p90:7.542,p95:47.699,p99:59.248,p999:71.761}},resources:{envoyGateway:{memory:{min:184.41,max:184.41,mean:184.41},cpu:{min:61.5,max:61.5,mean:61.5}},envoyProxy:{memory:{min:129.19,max:129.19,mean:129.19},cpu:{min:199.75,max:199.75,mean:199.75}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6028.67,totalRequests:180864,latency:{min:.361,mean:5.919,max:75.882,pstdev:11.427,percentiles:{p50:2.729,p75:4.244,p80:4.783,p90:6.934,p95:46.608,p99:53.897,p999:59.893}},resources:{envoyGateway:{memory:{min:229.41,max:229.41,mean:229.41},cpu:{min:114.16,max:114.16,mean:114.16}},envoyProxy:{memory:{min:121.69,max:121.69,mean:121.69},cpu:{min:363.78,max:363.78,mean:363.78}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6093.21,totalRequests:182799,latency:{min:.364,mean:5.859,max:73.809,pstdev:11.454,percentiles:{p50:2.634,p75:4.171,p80:4.702,p90:7.002,p95:46.548,p99:53.979,p999:62.793}},resources:{envoyGateway:{memory:{min:236.91,max:236.91,mean:236.91},cpu:{min:113.6,max:113.6,mean:113.6}},envoyProxy:{memory:{min:122.3,max:122.3,mean:122.3},cpu:{min:333.22,max:333.22,mean:333.22}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:6057.56,totalRequests:181727,latency:{min:.366,mean:5.898,max:83.623,pstdev:11.56,percentiles:{p50:2.628,p75:4.159,p80:4.695,p90:6.996,p95:46.897,p99:54.495,p999:61.849}},resources:{envoyGateway:{memory:{min:143.71,max:143.71,mean:143.71},cpu:{min:112.58,max:112.58,mean:112.58}},envoyProxy:{memory:{min:121.84,max:121.84,mean:121.84},cpu:{min:302.58,max:302.58,mean:302.58}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5899.93,totalRequests:176998,latency:{min:.329,mean:6.218,max:88.965,pstdev:12.007,percentiles:{p50:2.818,p75:4.388,p80:4.92,p90:7.204,p95:47.871,p99:55.517,p999:65.886}},resources:{envoyGateway:{memory:{min:154.24,max:154.24,mean:154.24},cpu:{min:102.3,max:102.3,mean:102.3}},envoyProxy:{memory:{min:129.34,max:129.34,mean:129.34},cpu:{min:270.21,max:270.21,mean:270.21}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5862.2,totalRequests:175868,latency:{min:.359,mean:6.106,max:107.622,pstdev:11.962,percentiles:{p50:2.648,p75:4.343,p80:4.933,p90:7.617,p95:47.341,p99:55.508,p999:69.103}},resources:{envoyGateway:{memory:{min:153.72,max:153.72,mean:153.72},cpu:{min:91.07,max:91.07,mean:91.07}},envoyProxy:{memory:{min:129.18,max:129.18,mean:129.18},cpu:{min:237.04,max:237.04,mean:237.04}}},poolOverflow:363,upstreamConnections:37}]},dse={metadata:{version:"1.2.0",runId:"1.2.0-1750189826754",date:"2024-11-06",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6006.27,totalRequests:180191,latency:{min:.359,mean:6.202,max:74.358,pstdev:11.262,percentiles:{p50:2.976,p75:4.719,p80:5.33,p90:8.159,p95:44.003,p99:54.19,p999:59.357}},resources:{envoyGateway:{memory:{min:113.66,max:113.66,mean:113.66},cpu:{min:.75,max:.75,mean:.75}},envoyProxy:{memory:{min:25.55,max:25.55,mean:25.55},cpu:{min:30.41,max:30.41,mean:30.41}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5988.15,totalRequests:179650,latency:{min:.366,mean:6.093,max:82.386,pstdev:11.67,percentiles:{p50:2.838,p75:4.283,p80:4.798,p90:6.972,p95:47.523,p99:54.038,p999:59.813}},resources:{envoyGateway:{memory:{min:119.16,max:119.16,mean:119.16},cpu:{min:1.53,max:1.53,mean:1.53}},envoyProxy:{memory:{min:31.71,max:31.71,mean:31.71},cpu:{min:61.03,max:61.03,mean:61.03}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5930.13,totalRequests:177905,latency:{min:.374,mean:6.182,max:93.884,pstdev:11.844,percentiles:{p50:2.812,p75:4.42,p80:4.967,p90:7.339,p95:47.618,p99:54.661,p999:61.865}},resources:{envoyGateway:{memory:{min:123.35,max:123.35,mean:123.35},cpu:{min:2.89,max:2.89,mean:2.89}},envoyProxy:{memory:{min:37.86,max:37.86,mean:37.86},cpu:{min:91.87,max:91.87,mean:91.87}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5713.27,totalRequests:171401,latency:{min:.384,mean:6.405,max:105.545,pstdev:12.313,percentiles:{p50:2.832,p75:4.45,p80:5.057,p90:7.773,p95:48.732,p99:56.084,p999:66.22}},resources:{envoyGateway:{memory:{min:150.92,max:150.92,mean:150.92},cpu:{min:15.08,max:15.08,mean:15.08}},envoyProxy:{memory:{min:60.05,max:60.05,mean:60.05},cpu:{min:125.09,max:125.09,mean:125.09}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5689.03,totalRequests:170675,latency:{min:.365,mean:5.939,max:98.639,pstdev:11.585,percentiles:{p50:2.715,p75:4.258,p80:4.772,p90:7.055,p95:45.996,p99:54.368,p999:68.464}},resources:{envoyGateway:{memory:{min:156.97,max:156.97,mean:156.97},cpu:{min:27.62,max:27.62,mean:27.62}},envoyProxy:{memory:{min:82.26,max:82.26,mean:82.26},cpu:{min:158.86,max:158.86,mean:158.86}}},poolOverflow:365,upstreamConnections:35},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5407.08,totalRequests:162220,latency:{min:.371,mean:6.424,max:131.579,pstdev:12.473,percentiles:{p50:2.692,p75:4.503,p80:5.177,p90:8.264,p95:47.54,p99:58.488,p999:72.72}},resources:{envoyGateway:{memory:{min:215.93,max:215.93,mean:215.93},cpu:{min:61.56,max:61.56,mean:61.56}},envoyProxy:{memory:{min:130.5,max:130.5,mean:130.5},cpu:{min:197.45,max:197.45,mean:197.45}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5905.23,totalRequests:177157,latency:{min:.396,mean:6.205,max:92.979,pstdev:12.065,percentiles:{p50:2.713,p75:4.262,p80:4.832,p90:7.415,p95:48.306,p99:55.736,p999:63.318}},resources:{envoyGateway:{memory:{min:233.71,max:233.71,mean:233.71},cpu:{min:114.53,max:114.53,mean:114.53}},envoyProxy:{memory:{min:118.94,max:118.94,mean:118.94},cpu:{min:360.39,max:360.39,mean:360.39}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5793.19,totalRequests:173800,latency:{min:.385,mean:6.501,max:86.843,pstdev:12.452,percentiles:{p50:2.744,p75:4.568,p80:5.227,p90:8.494,p95:48.965,p99:56.467,p999:65.382}},resources:{envoyGateway:{memory:{min:202.08,max:202.08,mean:202.08},cpu:{min:113.96,max:113.96,mean:113.96}},envoyProxy:{memory:{min:121.24,max:121.24,mean:121.24},cpu:{min:329.91,max:329.91,mean:329.91}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5783.8,totalRequests:173514,latency:{min:.385,mean:6.179,max:85.405,pstdev:11.889,percentiles:{p50:2.707,p75:4.462,p80:5.071,p90:7.76,p95:47.423,p99:54.994,p999:64.567}},resources:{envoyGateway:{memory:{min:144.59,max:144.59,mean:144.59},cpu:{min:112.93,max:112.93,mean:112.93}},envoyProxy:{memory:{min:121.22,max:121.22,mean:121.22},cpu:{min:299.28,max:299.28,mean:299.28}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5804.51,totalRequests:174139,latency:{min:.384,mean:6.147,max:82.661,pstdev:11.892,percentiles:{p50:2.807,p75:4.284,p80:4.791,p90:7.039,p95:47.558,p99:55.162,p999:66.723}},resources:{envoyGateway:{memory:{min:160.23,max:160.23,mean:160.23},cpu:{min:102.85,max:102.85,mean:102.85}},envoyProxy:{memory:{min:130.62,max:130.62,mean:130.62},cpu:{min:267.09,max:267.09,mean:267.09}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5804.87,totalRequests:174149,latency:{min:.368,mean:5.828,max:106.119,pstdev:11.561,percentiles:{p50:2.647,p75:4.078,p80:4.553,p90:6.656,p95:46.047,p99:55.025,p999:66.633}},resources:{envoyGateway:{memory:{min:155.88,max:155.88,mean:155.88},cpu:{min:91.5,max:91.5,mean:91.5}},envoyProxy:{memory:{min:130.61,max:130.61,mean:130.61},cpu:{min:234.47,max:234.47,mean:234.47}}},poolOverflow:365,upstreamConnections:35}]},fse={metadata:{version:"1.1.4",runId:"1.1.4-1750190329987",date:"2024-12-13",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.4",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.4/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5971.73,totalRequests:179152,latency:{min:.354,mean:6.247,max:97.591,pstdev:11.371,percentiles:{p50:2.948,p75:4.694,p80:5.352,p90:8.42,p95:44.519,p99:54.398,p999:62.244}},resources:{envoyGateway:{memory:{min:82.79,max:82.79,mean:82.79},cpu:{min:1.5000000000000002,max:1.5000000000000002,mean:1.5000000000000002}},envoyProxy:{memory:{min:24.11,max:24.11,mean:24.11},cpu:{min:101.53333333333335,max:101.53333333333335,mean:101.53333333333335}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5957.22,totalRequests:178717,latency:{min:.385,mean:6.145,max:93.36,pstdev:11.838,percentiles:{p50:2.751,p75:4.352,p80:4.922,p90:7.436,p95:47.679,p99:54.878,p999:62.414}},resources:{envoyGateway:{memory:{min:103.29,max:103.29,mean:103.29},cpu:{min:6.800000000000001,max:6.800000000000001,mean:6.800000000000001}},envoyProxy:{memory:{min:32.29,max:32.29,mean:32.29},cpu:{min:204,max:204,mean:204}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5896.53,totalRequests:176899,latency:{min:.36,mean:6.376,max:93.995,pstdev:12.077,percentiles:{p50:2.905,p75:4.542,p80:5.112,p90:7.699,p95:48.019,p99:55.472,p999:63.707}},resources:{envoyGateway:{memory:{min:151.7,max:151.7,mean:151.7},cpu:{min:32.599999999999994,max:32.599999999999994,mean:32.599999999999994}},envoyProxy:{memory:{min:46.46,max:46.46,mean:46.46},cpu:{min:309.8,max:309.8,mean:309.8}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5885.1,totalRequests:176553,latency:{min:.37,mean:6.378,max:102.457,pstdev:12.096,percentiles:{p50:2.834,p75:4.508,p80:5.093,p90:7.817,p95:48.099,p99:55.572,p999:64.329}},resources:{envoyGateway:{memory:{min:763.38,max:763.38,mean:763.38},cpu:{min:605.6333333333333,max:605.6333333333333,mean:605.6333333333333}},envoyProxy:{memory:{min:150.81,max:150.81,mean:150.81},cpu:{min:494.66666666666674,max:494.66666666666674,mean:494.66666666666674}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5642.37,totalRequests:169274,latency:{min:.314,mean:6.43,max:135.987,pstdev:12.216,percentiles:{p50:2.801,p75:4.489,p80:5.175,p90:8.673,p95:46.69,p99:56.358,p999:73.814}},resources:{envoyGateway:{memory:{min:1603.28,max:1603.28,mean:1603.28},cpu:{min:41.63333333333333,max:41.63333333333333,mean:41.63333333333333}},envoyProxy:{memory:{min:289.75,max:289.75,mean:289.75},cpu:{min:727.1666666666666,max:727.1666666666666,mean:727.1666666666666}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5993.8,totalRequests:179822,latency:{min:.381,mean:5.965,max:84.086,pstdev:11.66,percentiles:{p50:2.666,p75:4.169,p80:4.715,p90:6.995,p95:47.218,p99:54.775,p999:61.2}},resources:{envoyGateway:{memory:{min:117.16,max:117.16,mean:117.16},cpu:{min:518.0333333333333,max:518.0333333333333,mean:518.0333333333333}},envoyProxy:{memory:{min:278.72,max:278.72,mean:278.72},cpu:{min:1205.8,max:1205.8,mean:1205.8}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5947.1,totalRequests:178412,latency:{min:.346,mean:5.809,max:76.681,pstdev:11.155,percentiles:{p50:2.707,p75:4.164,p80:4.684,p90:6.938,p95:45.451,p99:53.227,p999:59.303}},resources:{envoyGateway:{memory:{min:123.23,max:123.23,mean:123.23},cpu:{min:512.5333333333333,max:512.5333333333333,mean:512.5333333333333}},envoyProxy:{memory:{min:291.25,max:291.25,mean:291.25},cpu:{min:1103.6333333333334,max:1103.6333333333334,mean:1103.6333333333334}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4884.46,totalRequests:146534,latency:{min:.362,mean:7.148,max:137.863,pstdev:11.237,percentiles:{p50:3.375,p75:6.266,p80:7.621,p90:17.699,p95:31.992,p99:59.576,p999:83.935}},resources:{envoyGateway:{memory:{min:338.12,max:338.12,mean:338.12},cpu:{min:488.1333333333333,max:488.1333333333333,mean:488.1333333333333}},envoyProxy:{memory:{min:294.41,max:294.41,mean:294.41},cpu:{min:993,max:993,mean:993}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5737.62,totalRequests:172120,latency:{min:.345,mean:6.192,max:117.288,pstdev:11.53,percentiles:{p50:2.822,p75:4.535,p80:5.155,p90:8.463,p95:42.631,p99:55.584,p999:70.291}},resources:{envoyGateway:{memory:{min:679.73,max:679.73,mean:679.73},cpu:{min:18.76666666666667,max:18.76666666666667,mean:18.76666666666667}},envoyProxy:{memory:{min:285.93,max:285.93,mean:285.93},cpu:{min:833.4333333333334,max:833.4333333333334,mean:833.4333333333334}}},poolOverflow:363,upstreamConnections:37}]},vse={metadata:{version:"1.1.3",runId:"1.1.3-1750190329984",date:"2024-11-04",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.3",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.3/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6070.53,totalRequests:182116,latency:{min:.353,mean:6.263,max:87.117,pstdev:11.274,percentiles:{p50:2.994,p75:4.783,p80:5.441,p90:8.506,p95:44.029,p99:54.13,p999:59.291}},resources:{envoyGateway:{memory:{min:85.16,max:85.16,mean:85.16},cpu:{min:1.3666666666666665,max:1.3666666666666665,mean:1.3666666666666665}},envoyProxy:{memory:{min:26,max:26,mean:26},cpu:{min:101.43333333333334,max:101.43333333333334,mean:101.43333333333334}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5999.45,totalRequests:179985,latency:{min:.368,mean:6.117,max:76.84,pstdev:11.675,percentiles:{p50:2.803,p75:4.339,p80:4.903,p90:7.204,p95:47.128,p99:54.317,p999:60.557}},resources:{envoyGateway:{memory:{min:102.18,max:102.18,mean:102.18},cpu:{min:7.033333333333333,max:7.033333333333333,mean:7.033333333333333}},envoyProxy:{memory:{min:34.18,max:34.18,mean:34.18},cpu:{min:203.56666666666666,max:203.56666666666666,mean:203.56666666666666}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6053.06,totalRequests:181592,latency:{min:.39,mean:5.889,max:94.826,pstdev:11.642,percentiles:{p50:2.599,p75:4.075,p80:4.583,p90:6.945,p95:47.128,p99:54.872,p999:62.212}},resources:{envoyGateway:{memory:{min:151.34,max:151.34,mean:151.34},cpu:{min:31.633333333333336,max:31.633333333333336,mean:31.633333333333336}},envoyProxy:{memory:{min:48.34,max:48.34,mean:48.34},cpu:{min:309.06666666666666,max:309.06666666666666,mean:309.06666666666666}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5895.77,totalRequests:176873,latency:{min:.378,mean:6.22,max:100.757,pstdev:12.033,percentiles:{p50:2.723,p75:4.341,p80:4.931,p90:7.644,p95:47.828,p99:55.521,p999:67.383}},resources:{envoyGateway:{memory:{min:687.16,max:687.16,mean:687.16},cpu:{min:578.2333333333332,max:578.2333333333332,mean:578.2333333333332}},envoyProxy:{memory:{min:150.69,max:150.69,mean:150.69},cpu:{min:488.20000000000005,max:488.20000000000005,mean:488.20000000000005}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5818.09,totalRequests:174543,latency:{min:.356,mean:6.109,max:107.913,pstdev:11.285,percentiles:{p50:2.832,p75:4.538,p80:5.163,p90:8.134,p95:42.639,p99:54.546,p999:67.543}},resources:{envoyGateway:{memory:{min:1329.35,max:1329.35,mean:1329.35},cpu:{min:61.33333333333333,max:61.33333333333333,mean:61.33333333333333}},envoyProxy:{memory:{min:303.55,max:303.55,mean:303.55},cpu:{min:731.4333333333334,max:731.4333333333334,mean:731.4333333333334}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5996.79,totalRequests:179907,latency:{min:.367,mean:6.127,max:77.688,pstdev:11.777,percentiles:{p50:2.745,p75:4.292,p80:4.835,p90:7.317,p95:47.597,p99:54.706,p999:61.323}},resources:{envoyGateway:{memory:{min:125.62,max:125.62,mean:125.62},cpu:{min:525.5,max:525.5,mean:525.5}},envoyProxy:{memory:{min:289.68,max:289.68,mean:289.68},cpu:{min:1239.6,max:1239.6,mean:1239.6}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5732.14,totalRequests:171956,latency:{min:.336,mean:4.876,max:76.279,pstdev:10.072,percentiles:{p50:2.29,p75:3.444,p80:3.846,p90:5.476,p95:24.546,p99:51.763,p999:57.04}},resources:{envoyGateway:{memory:{min:132.64,max:132.64,mean:132.64},cpu:{min:520.8333333333333,max:520.8333333333333,mean:520.8333333333333}},envoyProxy:{memory:{min:291.68,max:291.68,mean:291.68},cpu:{min:1138.0333333333335,max:1138.0333333333335,mean:1138.0333333333335}}},poolOverflow:371,upstreamConnections:29},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5311.34,totalRequests:159332,latency:{min:.362,mean:6.219,max:144.302,pstdev:11.133,percentiles:{p50:2.808,p75:4.741,p80:5.579,p90:10.689,p95:37.48,p99:53.626,p999:73.998}},resources:{envoyGateway:{memory:{min:179.01,max:179.01,mean:179.01},cpu:{min:497.9666666666666,max:497.9666666666666,mean:497.9666666666666}},envoyProxy:{memory:{min:298.77,max:298.77,mean:298.77},cpu:{min:1034.033333333333,max:1034.033333333333,mean:1034.033333333333}}},poolOverflow:365,upstreamConnections:35},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5633.85,totalRequests:169021,latency:{min:.369,mean:6.266,max:106.577,pstdev:11.127,percentiles:{p50:2.908,p75:4.793,p80:5.511,p90:9.568,p95:36.169,p99:54.472,p999:68.628}},resources:{envoyGateway:{memory:{min:487.12,max:487.12,mean:487.12},cpu:{min:27.133333333333336,max:27.133333333333336,mean:27.133333333333336}},envoyProxy:{memory:{min:299.84,max:299.84,mean:299.84},cpu:{min:837.8666666666668,max:837.8666666666668,mean:837.8666666666668}}},poolOverflow:363,upstreamConnections:37}]},hse={metadata:{version:"1.1.2",runId:"1.1.2-1750190329982",date:"2024-09-24",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.2",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.2/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5649.72,totalRequests:169493,latency:{min:.356,mean:6.56,max:72.347,pstdev:11.796,percentiles:{p50:3.044,p75:5.011,p80:5.69,p90:8.937,p95:46.88,p99:54.56,p999:59.316}},resources:{envoyGateway:{memory:{min:86.72,max:86.72,mean:86.72},cpu:{min:1.5666666666666667,max:1.5666666666666667,mean:1.5666666666666667}},envoyProxy:{memory:{min:24.26,max:24.26,mean:24.26},cpu:{min:101.63333333333333,max:101.63333333333333,mean:101.63333333333333}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5594.14,totalRequests:167826,latency:{min:.377,mean:6.225,max:71.024,pstdev:11.98,percentiles:{p50:2.812,p75:4.378,p80:4.905,p90:7.214,p95:48.16,p99:54.513,p999:59.85}},resources:{envoyGateway:{memory:{min:106.76,max:106.76,mean:106.76},cpu:{min:7.7,max:7.7,mean:7.7}},envoyProxy:{memory:{min:32.43,max:32.43,mean:32.43},cpu:{min:204.53333333333333,max:204.53333333333333,mean:204.53333333333333}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5523.65,totalRequests:165711,latency:{min:.379,mean:6.455,max:77.815,pstdev:12.317,percentiles:{p50:2.868,p75:4.51,p80:5.086,p90:7.645,p95:49.127,p99:55.048,p999:61.448}},resources:{envoyGateway:{memory:{min:149.03,max:149.03,mean:149.03},cpu:{min:29.333333333333332,max:29.333333333333332,mean:29.333333333333332}},envoyProxy:{memory:{min:46.61,max:46.61,mean:46.61},cpu:{min:309.7666666666667,max:309.7666666666667,mean:309.7666666666667}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5554.01,totalRequests:166624,latency:{min:.357,mean:6.246,max:99.753,pstdev:12.051,percentiles:{p50:2.841,p75:4.416,p80:4.96,p90:7.177,p95:48.371,p99:54.8,p999:63.275}},resources:{envoyGateway:{memory:{min:375.51,max:375.51,mean:375.51},cpu:{min:615.1,max:615.1,mean:615.1}},envoyProxy:{memory:{min:152.97,max:152.97,mean:152.97},cpu:{min:492.4666666666667,max:492.4666666666667,mean:492.4666666666667}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5475.04,totalRequests:164256,latency:{min:.365,mean:6.546,max:95.539,pstdev:12.646,percentiles:{p50:2.834,p75:4.484,p80:5.075,p90:7.891,p95:49.397,p99:56.231,p999:67.629}},resources:{envoyGateway:{memory:{min:1340.6,max:1340.6,mean:1340.6},cpu:{min:38.333333333333336,max:38.333333333333336,mean:38.333333333333336}},envoyProxy:{memory:{min:281.71,max:281.71,mean:281.71},cpu:{min:718.0666666666666,max:718.0666666666666,mean:718.0666666666666}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5657.68,totalRequests:169734,latency:{min:.355,mean:7.32,max:87.252,pstdev:13.162,percentiles:{p50:3.307,p75:5.218,p80:5.885,p90:9.252,p95:50.671,p99:56.332,p999:62.406}},resources:{envoyGateway:{memory:{min:371.29,max:371.29,mean:371.29},cpu:{min:578.7666666666667,max:578.7666666666667,mean:578.7666666666667}},envoyProxy:{memory:{min:273.57,max:273.57,mean:273.57},cpu:{min:1224,max:1224,mean:1224}}},poolOverflow:356,upstreamConnections:44},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5587.8,totalRequests:167636,latency:{min:.356,mean:6.346,max:68.095,pstdev:12.097,percentiles:{p50:2.89,p75:4.509,p80:5.041,p90:7.495,p95:48.56,p99:54.345,p999:60.436}},resources:{envoyGateway:{memory:{min:342.8,max:342.8,mean:342.8},cpu:{min:573.3000000000001,max:573.3000000000001,mean:573.3000000000001}},envoyProxy:{memory:{min:274.84,max:274.84,mean:274.84},cpu:{min:1122.2333333333333,max:1122.2333333333333,mean:1122.2333333333333}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4098.74,totalRequests:122966,latency:{min:.347,mean:3.66,max:99.745,pstdev:7.371,percentiles:{p50:1.658,p75:2.735,p80:3.147,p90:5.306,p95:18.03,p99:42.778,p999:60.44}},resources:{envoyGateway:{memory:{min:433.01,max:433.01,mean:433.01},cpu:{min:486.96666666666664,max:486.96666666666664,mean:486.96666666666664}},envoyProxy:{memory:{min:281.27,max:281.27,mean:281.27},cpu:{min:996.0333333333333,max:996.0333333333333,mean:996.0333333333333}}},poolOverflow:384,upstreamConnections:16},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5306.46,totalRequests:159194,latency:{min:.36,mean:6.884,max:106.807,pstdev:12.85,percentiles:{p50:2.983,p75:4.873,p80:5.573,p90:9.215,p95:49.102,p99:58.521,p999:70.213}},resources:{envoyGateway:{memory:{min:232.76,max:232.76,mean:232.76},cpu:{min:16.299999999999997,max:16.299999999999997,mean:16.299999999999997}},envoyProxy:{memory:{min:282.68,max:282.68,mean:282.68},cpu:{min:825.4333333333333,max:825.4333333333333,mean:825.4333333333333}}},poolOverflow:361,upstreamConnections:39}]},yse={metadata:{version:"1.1.1",runId:"1.1.1-1750190329981",date:"2024-09-12",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6258.99,totalRequests:187774,latency:{min:.333,mean:5.933,max:71.266,pstdev:10.816,percentiles:{p50:2.898,p75:4.513,p80:5.099,p90:7.661,p95:40.607,p99:53.149,p999:58.789}},resources:{envoyGateway:{memory:{min:84.04,max:84.04,mean:84.04},cpu:{min:1.5333333333333334,max:1.5333333333333334,mean:1.5333333333333334}},envoyProxy:{memory:{min:25.57,max:25.57,mean:25.57},cpu:{min:101.33333333333331,max:101.33333333333331,mean:101.33333333333331}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6118.28,totalRequests:183552,latency:{min:.359,mean:5.828,max:81.178,pstdev:11.437,percentiles:{p50:2.646,p75:4.049,p80:4.561,p90:6.666,p95:46.723,p99:53.913,p999:60.094}},resources:{envoyGateway:{memory:{min:101.33,max:101.33,mean:101.33},cpu:{min:6.8999999999999995,max:6.8999999999999995,mean:6.8999999999999995}},envoyProxy:{memory:{min:33.75,max:33.75,mean:33.75},cpu:{min:203.6,max:203.6,mean:203.6}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6045.36,totalRequests:181361,latency:{min:.377,mean:5.908,max:88.063,pstdev:11.539,percentiles:{p50:2.659,p75:4.143,p80:4.675,p90:6.863,p95:46.733,p99:54.091,p999:63.211}},resources:{envoyGateway:{memory:{min:115.34,max:115.34,mean:115.34},cpu:{min:32.800000000000004,max:32.800000000000004,mean:32.800000000000004}},envoyProxy:{memory:{min:47.79,max:47.79,mean:47.79},cpu:{min:308.96666666666664,max:308.96666666666664,mean:308.96666666666664}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5881.18,totalRequests:176436,latency:{min:.327,mean:6.376,max:130.33,pstdev:12.048,percentiles:{p50:2.843,p75:4.548,p80:5.181,p90:8.168,p95:47.517,p99:55.47,p999:66.041}},resources:{envoyGateway:{memory:{min:608.65,max:608.65,mean:608.65},cpu:{min:625.6666666666666,max:625.6666666666666,mean:625.6666666666666}},envoyProxy:{memory:{min:152.29,max:152.29,mean:152.29},cpu:{min:492.5666666666667,max:492.5666666666667,mean:492.5666666666667}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5875.93,totalRequests:176280,latency:{min:.381,mean:6.086,max:86.654,pstdev:11.932,percentiles:{p50:2.704,p75:4.181,p80:4.727,p90:7.177,p95:47.091,p99:55.814,p999:68.415}},resources:{envoyGateway:{memory:{min:1308.52,max:1308.52,mean:1308.52},cpu:{min:39.49999999999999,max:39.49999999999999,mean:39.49999999999999}},envoyProxy:{memory:{min:283.24,max:283.24,mean:283.24},cpu:{min:707.1333333333332,max:707.1333333333332,mean:707.1333333333332}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6077.56,totalRequests:182327,latency:{min:.362,mean:6.197,max:92.372,pstdev:11.72,percentiles:{p50:2.824,p75:4.438,p80:5,p90:7.503,p95:47.11,p99:54.169,p999:60.426}},resources:{envoyGateway:{memory:{min:121.13,max:121.13,mean:121.13},cpu:{min:544.5333333333334,max:544.5333333333334,mean:544.5333333333334}},envoyProxy:{memory:{min:277.29,max:277.29,mean:277.29},cpu:{min:1206.4666666666665,max:1206.4666666666665,mean:1206.4666666666665}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6047.67,totalRequests:181438,latency:{min:.37,mean:6.062,max:92.168,pstdev:11.743,percentiles:{p50:2.733,p75:4.268,p80:4.801,p90:7.226,p95:47.095,p99:54.886,p999:61.917}},resources:{envoyGateway:{memory:{min:126.22,max:126.22,mean:126.22},cpu:{min:538.8333333333334,max:538.8333333333334,mean:538.8333333333334}},envoyProxy:{memory:{min:285.62,max:285.62,mean:285.62},cpu:{min:1104.3000000000002,max:1104.3000000000002,mean:1104.3000000000002}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4654.8,totalRequests:139655,latency:{min:.336,mean:4.675,max:107.409,pstdev:9.843,percentiles:{p50:2.048,p75:3.459,p80:4.015,p90:6.531,p95:19.138,p99:57.518,p999:73.269}},resources:{envoyGateway:{memory:{min:480.36,max:480.36,mean:480.36},cpu:{min:377,max:377,mean:377}},envoyProxy:{memory:{min:289.51,max:289.51,mean:289.51},cpu:{min:969.2333333333332,max:969.2333333333332,mean:969.2333333333332}}},poolOverflow:377,upstreamConnections:23},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5676.68,totalRequests:170301,latency:{min:.376,mean:6.244,max:153.264,pstdev:11.618,percentiles:{p50:2.797,p75:4.618,p80:5.324,p90:8.807,p95:40.232,p99:56.496,p999:73.506}},resources:{envoyGateway:{memory:{min:436.58,max:436.58,mean:436.58},cpu:{min:28.066666666666666,max:28.066666666666666,mean:28.066666666666666}},envoyProxy:{memory:{min:283.47,max:283.47,mean:283.47},cpu:{min:813.3666666666667,max:813.3666666666667,mean:813.3666666666667}}},poolOverflow:363,upstreamConnections:37}]},gse={metadata:{version:"1.1.0",runId:"1.1.0-1750190329977",date:"2024-07-23",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6181.97,totalRequests:185463,latency:{min:.362,mean:5.902,max:73.084,pstdev:11.039,percentiles:{p50:2.765,p75:4.364,p80:4.935,p90:7.504,p95:41.244,p99:53.929,p999:61.147}},resources:{envoyGateway:{memory:{min:86.2,max:86.2,mean:86.2},cpu:{min:1.4333333333333333,max:1.4333333333333333,mean:1.4333333333333333}},envoyProxy:{memory:{min:24.09,max:24.09,mean:24.09},cpu:{min:101.36666666666667,max:101.36666666666667,mean:101.36666666666667}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6103.97,totalRequests:183121,latency:{min:.354,mean:5.852,max:75.943,pstdev:11.382,percentiles:{p50:2.681,p75:4.083,p80:4.601,p90:6.825,p95:46.262,p99:53.862,p999:60.651}},resources:{envoyGateway:{memory:{min:100.14,max:100.14,mean:100.14},cpu:{min:7.233333333333333,max:7.233333333333333,mean:7.233333333333333}},envoyProxy:{memory:{min:32.25,max:32.25,mean:32.25},cpu:{min:203.6,max:203.6,mean:203.6}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6074.87,totalRequests:182247,latency:{min:.371,mean:5.877,max:94.171,pstdev:11.399,percentiles:{p50:2.732,p75:4.191,p80:4.677,p90:6.801,p95:46.481,p99:53.866,p999:61.036}},resources:{envoyGateway:{memory:{min:114.69,max:114.69,mean:114.69},cpu:{min:30,max:30,mean:30}},envoyProxy:{memory:{min:46.42,max:46.42,mean:46.42},cpu:{min:308.70000000000005,max:308.70000000000005,mean:308.70000000000005}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5993.57,totalRequests:179811,latency:{min:.368,mean:6.123,max:96.571,pstdev:11.831,percentiles:{p50:2.753,p75:4.261,p80:4.799,p90:7.247,p95:47.368,p99:55.248,p999:66.586}},resources:{envoyGateway:{memory:{min:762.8,max:762.8,mean:762.8},cpu:{min:600.8666666666667,max:600.8666666666667,mean:600.8666666666667}},envoyProxy:{memory:{min:152.78,max:152.78,mean:152.78},cpu:{min:488.70000000000005,max:488.70000000000005,mean:488.70000000000005}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5812.8,totalRequests:174396,latency:{min:.388,mean:6.31,max:95.719,pstdev:12.246,percentiles:{p50:2.729,p75:4.334,p80:4.905,p90:7.607,p95:47.97,p99:56.811,p999:68.165}},resources:{envoyGateway:{memory:{min:1593.56,max:1593.56,mean:1593.56},cpu:{min:36.56666666666667,max:36.56666666666667,mean:36.56666666666667}},envoyProxy:{memory:{min:289.79,max:289.79,mean:289.79},cpu:{min:715.6333333333333,max:715.6333333333333,mean:715.6333333333333}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5916.93,totalRequests:177517,latency:{min:.385,mean:6.352,max:82.747,pstdev:12.011,percentiles:{p50:2.822,p75:4.461,p80:5.061,p90:7.769,p95:47.847,p99:55.068,p999:62.578}},resources:{envoyGateway:{memory:{min:124.07,max:124.07,mean:124.07},cpu:{min:519.6333333333332,max:519.6333333333332,mean:519.6333333333332}},envoyProxy:{memory:{min:284.03,max:284.03,mean:284.03},cpu:{min:1194.8666666666666,max:1194.8666666666666,mean:1194.8666666666666}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5876.35,totalRequests:176294,latency:{min:.371,mean:6.226,max:83.869,pstdev:11.816,percentiles:{p50:2.77,p75:4.396,p80:5,p90:7.848,p95:47.163,p99:55.156,p999:64.434}},resources:{envoyGateway:{memory:{min:131.62,max:131.62,mean:131.62},cpu:{min:513.6,max:513.6,mean:513.6}},envoyProxy:{memory:{min:291.73,max:291.73,mean:291.73},cpu:{min:1092.9333333333334,max:1092.9333333333334,mean:1092.9333333333334}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4820.43,totalRequests:144617,latency:{min:.342,mean:7.088,max:172.031,pstdev:12.642,percentiles:{p50:3.156,p75:5.48,p80:6.443,p90:12.007,p95:39.675,p99:63.842,p999:86.532}},resources:{envoyGateway:{memory:{min:374.36,max:374.36,mean:374.36},cpu:{min:462.8,max:462.8,mean:462.8}},envoyProxy:{memory:{min:289.98,max:289.98,mean:289.98},cpu:{min:980.4,max:980.4,mean:980.4}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5746.71,totalRequests:172402,latency:{min:.386,mean:6.313,max:101.535,pstdev:11.578,percentiles:{p50:2.875,p75:4.579,p80:5.222,p90:8.617,p95:44.341,p99:54.996,p999:67.178}},resources:{envoyGateway:{memory:{min:670.44,max:670.44,mean:670.44},cpu:{min:24.333333333333332,max:24.333333333333332,mean:24.333333333333332}},envoyProxy:{memory:{min:285.86,max:285.86,mean:285.86},cpu:{min:824.5666666666667,max:824.5666666666667,mean:824.5666666666667}}},poolOverflow:362,upstreamConnections:38}]},_se={metadata:{version:"1.6.6",runId:"1.6.6-release-2026-04-16",date:"2026-04-16T14:08:03Z",environment:"GitHub Release",description:"Benchmark results for version 1.6.6 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.6.6/benchmark_report.zip",testConfiguration:{connections:100,cpuLimit:"1000m",duration:90,memoryLimit:"2000Mi",rps:100}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:404.438202247191,totalRequests:35995,latency:{max:33.880063,min:.387376,mean:.507736,pstdev:.411868,percentiles:{p50:.470607,p75:.49054299999999995,p80:.49811099999999997,p90:.5253429999999999,p95:.569183,p99:1.250367,p999:5.262591}},resources:{envoyGateway:{memory:{max:134.1796875,min:116.68359375,mean:132.01341145833334},cpu:{max:1.266666666666667,min:.33333333333333287,mean:.5738095238095238}},envoyProxy:{memory:{max:28.56640625,min:7.24609375,mean:26.650390625},cpu:{max:10.481698907670713,min:10.198609044927105,mean:10.315512665874808}}},poolOverflow:5,upstreamConnections:9,counters:{"benchmark.http_2xx":{value:35995,perSecond:404.438202247191},"benchmark.pool_overflow":{value:5,perSecond:.056179775280898875},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:9,perSecond:.10112359550561797},upstream_cx_rx_bytes_total:{value:5651215,perSecond:63496.79775280899},upstream_cx_total:{value:9,perSecond:.10112359550561797},upstream_cx_tx_bytes_total:{value:1619775,perSecond:18199.719101123595},upstream_rq_pending_overflow:{value:5,perSecond:.056179775280898875},upstream_rq_pending_total:{value:9,perSecond:.10112359550561797},upstream_rq_total:{value:35995,perSecond:404.438202247191}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1199.2333333333333,totalRequests:107931,latency:{max:90.86975899999999,min:.35481599999999996,mean:.50866,pstdev:.876099,percentiles:{p50:.457231,p75:.476111,p80:.481439,p90:.506111,p95:.5612790000000001,p99:1.435519,p999:7.173119}},resources:{envoyGateway:{memory:{max:146.0625,min:134.296875,mean:142.66171875},cpu:{max:2.066666666666667,min:.46666666666666556,mean:.8133333333333337}},envoyProxy:{memory:{max:32.96875,min:28.46484375,mean:32.34921875},cpu:{max:30.693209207037853,min:22.027248979189356,mean:29.453267114194706}}},poolOverflow:69,upstreamConnections:34,counters:{"benchmark.http_2xx":{value:107931,perSecond:1199.2333333333333},"benchmark.pool_overflow":{value:69,perSecond:.7666666666666667},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:34,perSecond:.37777777777777777},upstream_cx_rx_bytes_total:{value:16945167,perSecond:188279.63333333333},upstream_cx_total:{value:34,perSecond:.37777777777777777},upstream_cx_tx_bytes_total:{value:4856895,perSecond:53965.5},upstream_rq_pending_overflow:{value:69,perSecond:.7666666666666667},upstream_rq_pending_total:{value:34,perSecond:.37777777777777777},upstream_rq_total:{value:107931,perSecond:1199.2333333333333}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:2021.1348314606741,totalRequests:179881,latency:{max:56.614911,min:.353712,mean:.516452,pstdev:.659549,percentiles:{p50:.460671,p75:.476447,p80:.482431,p90:.514799,p95:.611711,p99:1.713855,p999:8.161279}},resources:{envoyGateway:{memory:{max:148.16015625,min:137.08203125,mean:144.21393229166668},cpu:{max:2.8666666666666676,min:.4666666666666685,mean:1.0355555555555556}},envoyProxy:{memory:{max:41.40234375,min:34.8359375,mean:38.9046875},cpu:{max:49.46994247110364,min:49.11130632911394,mean:49.326488014307756}}},poolOverflow:119,upstreamConnections:49,counters:{"benchmark.http_2xx":{value:179881,perSecond:2021.1348314606741},"benchmark.pool_overflow":{value:119,perSecond:1.3370786516853932},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:49,perSecond:.550561797752809},upstream_cx_rx_bytes_total:{value:28241317,perSecond:317318.1685393258},upstream_cx_total:{value:49,perSecond:.550561797752809},upstream_cx_tx_bytes_total:{value:8094645,perSecond:90951.06741573034},upstream_rq_pending_overflow:{value:119,perSecond:1.3370786516853932},upstream_rq_pending_total:{value:49,perSecond:.550561797752809},upstream_rq_total:{value:179881,perSecond:2021.1348314606741}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3234.921348314607,totalRequests:287908,latency:{max:214.679551,min:.33377599999999996,mean:1.347763,pstdev:5.953906,percentiles:{p50:.5782069999999999,p75:.736575,p80:.784127,p90:.959999,p95:1.368447,p99:32.039935,p999:80.101375}},resources:{envoyGateway:{memory:{max:157.796875,min:142.00390625,mean:153.67513020833334},cpu:{max:4.933333333333323,min:.7999999999999948,mean:1.5888888888888897}},envoyProxy:{memory:{max:73.23828125,min:60.9609375,mean:69.82369791666666},cpu:{max:78.84926882768706,min:39.2908866931036,mean:62.03672197900912}}},poolOverflow:91,upstreamConnections:270,counters:{"benchmark.http_2xx":{value:287908,perSecond:3234.921348314607},"benchmark.pool_overflow":{value:91,perSecond:1.0224719101123596},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:270,perSecond:3.033707865168539},upstream_cx_rx_bytes_total:{value:45201556,perSecond:507882.65168539324},upstream_cx_total:{value:270,perSecond:3.033707865168539},upstream_cx_tx_bytes_total:{value:12955860,perSecond:145571.4606741573},upstream_rq_pending_overflow:{value:91,perSecond:1.0224719101123596},upstream_rq_pending_total:{value:270,perSecond:3.033707865168539},upstream_rq_total:{value:287908,perSecond:3234.921348314607}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3998.777777777778,totalRequests:359890,latency:{max:245.112831,min:.33624000000000004,mean:4.780056,pstdev:17.543810999999998,percentiles:{p50:.589215,p75:.869631,p80:1.021663,p90:3.309439,p95:25.322495,p99:94.932991,p999:175.874047}},resources:{envoyGateway:{memory:{max:161.43359375,min:156.67578125,mean:159.50208333333333},cpu:{max:8.266666666666655,min:.86666666666666,mean:2.1822222222222245}},envoyProxy:{memory:{max:100.265625,min:91.65234375,mean:97.87916666666666},cpu:{max:98.35603575528931,min:59.25775073715499,mean:84.76149181860085}}},poolOverflow:108,upstreamConnections:292,counters:{"benchmark.http_2xx":{value:359890,perSecond:3998.777777777778},"benchmark.pool_overflow":{value:108,perSecond:1.2},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:292,perSecond:3.2444444444444445},upstream_cx_rx_bytes_total:{value:56502730,perSecond:627808.1111111111},upstream_cx_total:{value:292,perSecond:3.2444444444444445},upstream_cx_tx_bytes_total:{value:16195140,perSecond:179946},upstream_rq_pending_overflow:{value:108,perSecond:1.2},upstream_rq_pending_total:{value:292,perSecond:3.2444444444444445},upstream_rq_total:{value:359892,perSecond:3998.8}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:4689.977777777778,totalRequests:422098,latency:{max:248.496127,min:.398128,mean:59.083398,pstdev:39.084657,percentiles:{p50:70.328319,p75:87.94931100000001,p80:92.20505499999999,p90:101.740543,p95:110.870527,p99:168.321023,p999:202.465279}},resources:{envoyGateway:{memory:{max:187.17578125,min:174.92578125,mean:183.34283854166668},cpu:{max:14.933333333333392,min:.8666666666667312,mean:3.491111111111108}},envoyProxy:{memory:{max:163.9296875,min:150.73046875,mean:158.60247395833332},cpu:{max:69.85045922786442,min:69.85045922786442,mean:69.85045922786442}}},poolOverflow:113,upstreamConnections:287,counters:{"benchmark.http_2xx":{value:422098,perSecond:4689.977777777778},"benchmark.pool_overflow":{value:113,perSecond:1.2555555555555555},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:287,perSecond:3.188888888888889},upstream_cx_rx_bytes_total:{value:66269386,perSecond:736326.5111111111},upstream_cx_total:{value:287,perSecond:3.188888888888889},upstream_cx_tx_bytes_total:{value:18998505,perSecond:211094.5},upstream_rq_pending_overflow:{value:113,perSecond:1.2555555555555555},upstream_rq_pending_total:{value:287,perSecond:3.188888888888889},upstream_rq_total:{value:422189,perSecond:4690.988888888889}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3999.288888888889,totalRequests:359936,latency:{max:458.833919,min:.331216,mean:4.969953,pstdev:19.039579,percentiles:{p50:.596607,p75:.886719,p80:1.034399,p90:2.897279,p95:24.657919,p99:101.179391,p999:187.269119}},resources:{envoyGateway:{memory:{max:174.984375,min:162.4921875,mean:167.33841145833333},cpu:{max:1.2659914712153366,min:1.13333333333325,mean:1.1709512339401278}},envoyProxy:{memory:{max:156.515625,min:154.5625,mean:155.71731770833333},cpu:{max:97.94922054530775,min:94.7142316561226,mean:95.79061787275042}}},poolOverflow:61,upstreamConnections:339,counters:{"benchmark.http_2xx":{value:359936,perSecond:3999.288888888889},"benchmark.pool_overflow":{value:61,perSecond:.6777777777777778},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:339,perSecond:3.7666666666666666},upstream_cx_rx_bytes_total:{value:56509952,perSecond:627888.3555555556},upstream_cx_total:{value:339,perSecond:3.7666666666666666},upstream_cx_tx_bytes_total:{value:16197255,perSecond:179969.5},upstream_rq_pending_overflow:{value:61,perSecond:.6777777777777778},upstream_rq_pending_total:{value:339,perSecond:3.7666666666666666},upstream_rq_total:{value:359939,perSecond:3999.322222222222}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3198.5777777777776,totalRequests:287872,latency:{max:92.098559,min:.3348,mean:1.216339,pstdev:5.12706,percentiles:{p50:.5432629999999999,p75:.6351669999999999,p80:.684223,p90:.906527,p95:1.413311,p99:28.030975,p999:69.734399}},resources:{envoyGateway:{memory:{max:166.23828125,min:160.7265625,mean:162.56966145833334},cpu:{max:1.2000000000000455,min:1.066666666666644,mean:1.1166666666666698}},envoyProxy:{memory:{max:154.7578125,min:150.59765625,mean:152.107421875},cpu:{max:80.57323272090986,min:80.57323272090986,mean:80.57323272090986}}},poolOverflow:128,upstreamConnections:235,counters:{"benchmark.http_2xx":{value:287872,perSecond:3198.5777777777776},"benchmark.pool_overflow":{value:128,perSecond:1.4222222222222223},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:235,perSecond:2.611111111111111},upstream_cx_rx_bytes_total:{value:45195904,perSecond:502176.7111111111},upstream_cx_total:{value:235,perSecond:2.611111111111111},upstream_cx_tx_bytes_total:{value:12954240,perSecond:143936},upstream_rq_pending_overflow:{value:128,perSecond:1.4222222222222223},upstream_rq_pending_total:{value:235,perSecond:2.611111111111111},upstream_rq_total:{value:287872,perSecond:3198.5777777777776}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:2019.629213483146,totalRequests:179747,latency:{max:96.550911,min:.349776,mean:.577981,pstdev:1.2729519999999999,percentiles:{p50:.474671,p75:.518367,p80:.539359,p90:.611071,p95:.763871,p99:2.109695,p999:12.799999}},resources:{envoyGateway:{memory:{max:157.94140625,min:148.09765625,mean:150.53111979166667},cpu:{max:1.2000000000000457,min:1.066666666666644,mean:1.1391304347826228}},envoyProxy:{memory:{max:151.9296875,min:150.359375,mean:151.08776041666667},cpu:{max:51.70564292946298,min:50.91727267696056,mean:51.180062761128035}}},poolOverflow:253,upstreamConnections:62,counters:{"benchmark.http_2xx":{value:179747,perSecond:2019.629213483146},"benchmark.pool_overflow":{value:253,perSecond:2.842696629213483},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:62,perSecond:.6966292134831461},upstream_cx_rx_bytes_total:{value:28220279,perSecond:317081.78651685396},upstream_cx_total:{value:62,perSecond:.6966292134831461},upstream_cx_tx_bytes_total:{value:8088615,perSecond:90883.31460674158},upstream_rq_pending_overflow:{value:253,perSecond:2.842696629213483},upstream_rq_pending_total:{value:62,perSecond:.6966292134831461},upstream_rq_total:{value:179747,perSecond:2019.629213483146}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1199.4888888888888,totalRequests:107954,latency:{max:52.932607,min:.366016,mean:.513018,pstdev:.546949,percentiles:{p50:.46732700000000005,p75:.48377499999999996,p80:.48961499999999997,p90:.515983,p95:.569087,p99:1.446079,p999:8.301055}},resources:{envoyGateway:{memory:{max:152.47265625,min:142.44921875,mean:148.01822916666666},cpu:{max:1.2666666666666515,min:1.066666666666644,mean:1.1666666666666716}},envoyProxy:{memory:{max:151.0078125,min:149.953125,mean:150.43489583333334},cpu:{max:31.921542598843654,min:18.91236776541521,mean:25.88042318797759}}},poolOverflow:46,upstreamConnections:32,counters:{"benchmark.http_2xx":{value:107954,perSecond:1199.4888888888888},"benchmark.pool_overflow":{value:46,perSecond:.5111111111111111},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:32,perSecond:.35555555555555557},upstream_cx_rx_bytes_total:{value:16948778,perSecond:188319.75555555554},upstream_cx_total:{value:32,perSecond:.35555555555555557},upstream_cx_tx_bytes_total:{value:4857930,perSecond:53977},upstream_rq_pending_overflow:{value:46,perSecond:.5111111111111111},upstream_rq_pending_total:{value:32,perSecond:.35555555555555557},upstream_rq_total:{value:107954,perSecond:1199.4888888888888}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:404.1123595505618,totalRequests:35966,latency:{max:111.333375,min:.38016,mean:.545542,pstdev:1.075619,percentiles:{p50:.485487,p75:.527999,p80:.539679,p90:.573791,p95:.621375,p99:1.381631,p999:7.817727}},resources:{envoyGateway:{memory:{max:145.6328125,min:143.19921875,mean:144.47630208333334},cpu:{max:1.2666666666666517,min:1.066666666666644,mean:1.1128344152949756}},envoyProxy:{memory:{max:150.8671875,min:150.2421875,mean:150.51067708333332},cpu:{max:12.051869716020317,min:10.812681257807123,mean:11.105701068624029}}},poolOverflow:34,upstreamConnections:14,counters:{"benchmark.http_2xx":{value:35966,perSecond:404.1123595505618},"benchmark.pool_overflow":{value:34,perSecond:.38202247191011235},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:14,perSecond:.15730337078651685},upstream_cx_rx_bytes_total:{value:5646662,perSecond:63445.6404494382},upstream_cx_total:{value:14,perSecond:.15730337078651685},upstream_cx_tx_bytes_total:{value:1618470,perSecond:18185.05617977528},upstream_rq_pending_overflow:{value:34,perSecond:.38202247191011235},upstream_rq_pending_total:{value:14,perSecond:.15730337078651685},upstream_rq_total:{value:35966,perSecond:404.1123595505618}}}]},xse={metadata:{version:"1.7.2",runId:"1.7.2-release-2026-04-17",date:"2026-04-17T01:33:18Z",environment:"GitHub Release",description:"Benchmark results for version 1.7.2 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.7.2/benchmark_report.zip",testConfiguration:{connections:100,cpuLimit:"1000m",duration:90,memoryLimit:"2000Mi",rps:100}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:404.35955056179773,totalRequests:35988,latency:{max:101.68729499999999,min:.355904,mean:.49871699999999997,pstdev:.9805560000000001,percentiles:{p50:.457103,p75:.47526300000000005,p80:.48102300000000003,p90:.501631,p95:.535551,p99:1.060351,p999:6.245631}},resources:{envoyGateway:{memory:{max:134.72265625,min:116.70703125,mean:131.82174479166667},cpu:{max:1.1999999999999995,min:.33333333333333287,mean:.5690476190476189}},envoyProxy:{memory:{max:25.734375,min:6.9375,mean:22.484895833333333},cpu:{max:10.60714949795463,min:6.173356863557859,mean:8.817763315828271}}},poolOverflow:12,upstreamConnections:11,counters:{"benchmark.http_2xx":{value:35988,perSecond:404.35955056179773},"benchmark.pool_overflow":{value:12,perSecond:.1348314606741573},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:11,perSecond:.12359550561797752},upstream_cx_rx_bytes_total:{value:5650116,perSecond:63484.449438202246},upstream_cx_total:{value:11,perSecond:.12359550561797752},upstream_cx_tx_bytes_total:{value:1619460,perSecond:18196.1797752809},upstream_rq_pending_overflow:{value:12,perSecond:.1348314606741573},upstream_rq_pending_total:{value:11,perSecond:.12359550561797752},upstream_rq_total:{value:35988,perSecond:404.35955056179773}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1213.2022471910113,totalRequests:107975,latency:{max:52.019199,min:.346128,mean:.48446300000000003,pstdev:.478466,percentiles:{p50:.447967,p75:.463743,p80:.468719,p90:.49182299999999995,p95:.539551,p99:1.309695,p999:5.046527}},resources:{envoyGateway:{memory:{max:146.11328125,min:135.58984375,mean:141.50143229166667},cpu:{max:1.9999999999999987,min:.40000000000000036,mean:.7711111111111112}},envoyProxy:{memory:{max:29.76953125,min:27.9296875,mean:29.26328125},cpu:{max:30.24145243537894,min:30.22350314191992,mean:30.22948623973959}}},poolOverflow:25,upstreamConnections:24,counters:{"benchmark.http_2xx":{value:107975,perSecond:1213.2022471910113},"benchmark.pool_overflow":{value:25,perSecond:.2808988764044944},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:24,perSecond:.2696629213483146},upstream_cx_rx_bytes_total:{value:16952075,perSecond:190472.75280898876},upstream_cx_total:{value:24,perSecond:.2696629213483146},upstream_cx_tx_bytes_total:{value:4858875,perSecond:54594.10112359551},upstream_rq_pending_overflow:{value:25,perSecond:.2808988764044944},upstream_rq_pending_total:{value:24,perSecond:.2696629213483146},upstream_rq_total:{value:107975,perSecond:1213.2022471910113}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:2020.9550561797753,totalRequests:179865,latency:{max:104.263679,min:.33550399999999997,mean:.539038,pstdev:.863241,percentiles:{p50:.465887,p75:.521359,p80:.549887,p90:.658143,p95:.761823,p99:1.716479,p999:7.473919}},resources:{envoyGateway:{memory:{max:148.65625,min:137.18359375,mean:144.56315104166666},cpu:{max:2.7333333333333343,min:.5333333333333339,mean:.9666666666666668}},envoyProxy:{memory:{max:36.41015625,min:33.765625,mean:35.787109375},cpu:{max:45.66901459854013,min:45.04842244701349,mean:45.243921833694976}}},poolOverflow:135,upstreamConnections:48,counters:{"benchmark.http_2xx":{value:179865,perSecond:2020.9550561797753},"benchmark.pool_overflow":{value:135,perSecond:1.5168539325842696},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:48,perSecond:.5393258426966292},upstream_cx_rx_bytes_total:{value:28238805,perSecond:317289.9438202247},upstream_cx_total:{value:48,perSecond:.5393258426966292},upstream_cx_tx_bytes_total:{value:8093925,perSecond:90942.97752808989},upstream_rq_pending_overflow:{value:135,perSecond:1.5168539325842696},upstream_rq_pending_total:{value:48,perSecond:.5393258426966292},upstream_rq_total:{value:179865,perSecond:2020.9550561797753}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3197.4222222222224,totalRequests:287768,latency:{max:99.41401499999999,min:.319616,mean:1.147704,pstdev:4.4813860000000005,percentiles:{p50:.594687,p75:.687487,p80:.742047,p90:1.042047,p95:1.562431,p99:15.768575,p999:70.324223}},resources:{envoyGateway:{memory:{max:154.125,min:140.8671875,mean:151.02200520833333},cpu:{max:4.9333333333333345,min:.5999999999999991,mean:1.5511111111111098}},envoyProxy:{memory:{max:68.3515625,min:57.90234375,mean:64.46614583333333},cpu:{max:68.30009668842146,min:43.403573110547036,mean:62.29201721165111}}},poolOverflow:56,upstreamConnections:264,counters:{"benchmark.http_2xx":{value:287768,perSecond:3197.4222222222224},"benchmark.pool_overflow":{value:56,perSecond:.6222222222222222},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:264,perSecond:2.933333333333333},upstream_cx_rx_bytes_total:{value:45179576,perSecond:501995.2888888889},upstream_cx_total:{value:264,perSecond:2.933333333333333},upstream_cx_tx_bytes_total:{value:12957480,perSecond:143972},upstream_rq_pending_overflow:{value:56,perSecond:.6222222222222222},upstream_rq_pending_total:{value:264,perSecond:2.933333333333333},upstream_rq_total:{value:287944,perSecond:3199.3777777777777}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3999.5777777777776,totalRequests:359962,latency:{max:386.252799,min:.307408,mean:2.964271,pstdev:14.94732,percentiles:{p50:.611135,p75:.7879989999999999,p80:.863615,p90:1.354687,p95:3.6558070000000003,p99:74.362879,p999:160.923647}},resources:{envoyGateway:{memory:{max:171.26953125,min:161.11328125,mean:166.31549479166668},cpu:{max:6.866666666666673,min:.86666666666666,mean:2.0600000000000005}},envoyProxy:{memory:{max:95.4609375,min:84.73046875,mean:91.400390625},cpu:{max:82.5813865584955,min:45.283503319351,mean:72.3024265227598}}},poolOverflow:30,upstreamConnections:370,counters:{"benchmark.http_2xx":{value:359962,perSecond:3999.5777777777776},"benchmark.pool_overflow":{value:30,perSecond:.3333333333333333},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:370,perSecond:4.111111111111111},upstream_cx_rx_bytes_total:{value:56514034,perSecond:627933.7111111111},upstream_cx_total:{value:370,perSecond:4.111111111111111},upstream_cx_tx_bytes_total:{value:16198650,perSecond:179985},upstream_rq_pending_overflow:{value:30,perSecond:.3333333333333333},upstream_rq_pending_total:{value:370,perSecond:4.111111111111111},upstream_rq_total:{value:359970,perSecond:3999.6666666666665}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5057.266666666666,totalRequests:455154,latency:{max:1285.9473910000002,min:1.371584,mean:59.338332,pstdev:19.470976,percentiles:{p50:57.772031,p75:66.177023,p80:67.76831899999999,p90:71.90118299999999,p95:78.733311,p99:111.398911,p999:167.215103}},resources:{envoyGateway:{memory:{max:188.16015625,min:171.28515625,mean:182.01666666666668},cpu:{max:14.13333333333327,min:.8666666666666363,mean:2.964444444444452}},envoyProxy:{memory:{max:145.08984375,min:139.8203125,mean:143.387890625},cpu:{max:99.22699520543796,min:60.78907448875107,mean:92.6174535512916}}},poolOverflow:98,upstreamConnections:302,counters:{"benchmark.http_2xx":{value:455154,perSecond:5057.266666666666},"benchmark.pool_overflow":{value:98,perSecond:1.0888888888888888},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:302,perSecond:3.3555555555555556},upstream_cx_rx_bytes_total:{value:71459178,perSecond:793990.8666666667},upstream_cx_total:{value:302,perSecond:3.3555555555555556},upstream_cx_tx_bytes_total:{value:20495520,perSecond:227728},upstream_rq_pending_overflow:{value:98,perSecond:1.0888888888888888},upstream_rq_pending_total:{value:302,perSecond:3.3555555555555556},upstream_rq_total:{value:455456,perSecond:5060.622222222222}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3999.233333333333,totalRequests:359931,latency:{max:385.597439,min:.31702400000000003,mean:2.6073619999999997,pstdev:12.422353000000001,percentiles:{p50:.617951,p75:.7978230000000001,p80:.873503,p90:1.409791,p95:3.412095,p99:67.915775,p999:139.509759}},resources:{envoyGateway:{memory:{max:176.8359375,min:171.98046875,mean:173.68333333333334},cpu:{max:1.1333333333333446,min:1.0000000000000377,mean:1.106060606060612}},envoyProxy:{memory:{max:145.45703125,min:143.30859375,mean:144.875},cpu:{max:82.85775245913221,min:44.665104008759954,mean:76.23169817649351}}},poolOverflow:68,upstreamConnections:332,counters:{"benchmark.http_2xx":{value:359931,perSecond:3999.233333333333},"benchmark.pool_overflow":{value:68,perSecond:.7555555555555555},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:332,perSecond:3.688888888888889},upstream_cx_rx_bytes_total:{value:56509167,perSecond:627879.6333333333},upstream_cx_total:{value:332,perSecond:3.688888888888889},upstream_cx_tx_bytes_total:{value:16196940,perSecond:179966},upstream_rq_pending_overflow:{value:68,perSecond:.7555555555555555},upstream_rq_pending_total:{value:332,perSecond:3.688888888888889},upstream_rq_total:{value:359932,perSecond:3999.2444444444445}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3199.6111111111113,totalRequests:287965,latency:{max:80.625663,min:.322336,mean:1.0790170000000001,pstdev:3.7298549999999997,percentiles:{p50:.598207,p75:.7040310000000001,p80:.780127,p90:1.153535,p95:1.6243830000000001,p99:11.442687,p999:61.790207}},resources:{envoyGateway:{memory:{max:175.10546875,min:161.109375,mean:163.90182291666667},cpu:{max:1.1333333333333449,min:.9333333333332423,mean:1.0638888888888844}},envoyProxy:{memory:{max:143.6328125,min:141.3671875,mean:142.62200520833332},cpu:{max:68.99807624218096,min:67.9146420263634,mean:68.48326157169933}}},poolOverflow:35,upstreamConnections:230,counters:{"benchmark.http_2xx":{value:287965,perSecond:3199.6111111111113},"benchmark.pool_overflow":{value:35,perSecond:.3888888888888889},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:230,perSecond:2.5555555555555554},upstream_cx_rx_bytes_total:{value:45210505,perSecond:502338.94444444444},upstream_cx_total:{value:230,perSecond:2.5555555555555554},upstream_cx_tx_bytes_total:{value:12958425,perSecond:143982.5},upstream_rq_pending_overflow:{value:35,perSecond:.3888888888888889},upstream_rq_pending_total:{value:230,perSecond:2.5555555555555554},upstream_rq_total:{value:287965,perSecond:3199.6111111111113}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:1998.3777777777777,totalRequests:179854,latency:{max:62.019583000000004,min:.327328,mean:.485828,pstdev:.668839,percentiles:{p50:.423551,p75:.443055,p80:.449919,p90:.479887,p95:.620959,p99:1.817983,p999:8.064511}},resources:{envoyGateway:{memory:{max:165.8046875,min:152.2734375,mean:156.540234375},cpu:{max:1.2000000000000455,min:.9999999999999432,mean:1.0666666666666655}},envoyProxy:{memory:{max:141.15234375,min:139.859375,mean:140.26106770833334},cpu:{max:45.485545566719395,min:31.71803855746116,mean:44.091576143376344}}},poolOverflow:146,upstreamConnections:48,counters:{"benchmark.http_2xx":{value:179854,perSecond:1998.3777777777777},"benchmark.pool_overflow":{value:146,perSecond:1.6222222222222222},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:48,perSecond:.5333333333333333},upstream_cx_rx_bytes_total:{value:28237078,perSecond:313745.31111111114},upstream_cx_total:{value:48,perSecond:.5333333333333333},upstream_cx_tx_bytes_total:{value:8093430,perSecond:89927},upstream_rq_pending_overflow:{value:146,perSecond:1.6222222222222222},upstream_rq_pending_total:{value:48,perSecond:.5333333333333333},upstream_rq_total:{value:179854,perSecond:1998.3777777777777}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1213.0224719101125,totalRequests:107959,latency:{max:64.030719,min:.34096000000000004,mean:.484964,pstdev:.641611,percentiles:{p50:.440847,p75:.45943900000000004,p80:.464143,p90:.48572699999999996,p95:.531871,p99:1.361407,p999:5.570815}},resources:{envoyGateway:{memory:{max:155.21484375,min:146.46484375,mean:150.92682291666668},cpu:{max:1.2666666666666515,min:.9999999999999432,mean:1.1166666666666694}},envoyProxy:{memory:{max:140.078125,min:139.0859375,mean:139.482421875},cpu:{max:30.431386861314387,min:28.98025197235646,mean:30.07745151829415}}},poolOverflow:41,upstreamConnections:28,counters:{"benchmark.http_2xx":{value:107959,perSecond:1213.0224719101125},"benchmark.pool_overflow":{value:41,perSecond:.4606741573033708},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:28,perSecond:.3146067415730337},upstream_cx_rx_bytes_total:{value:16949563,perSecond:190444.52808988764},upstream_cx_total:{value:28,perSecond:.3146067415730337},upstream_cx_tx_bytes_total:{value:4858155,perSecond:54586.011235955055},upstream_rq_pending_overflow:{value:41,perSecond:.4606741573033708},upstream_rq_pending_total:{value:28,perSecond:.3146067415730337},upstream_rq_total:{value:107959,perSecond:1213.0224719101125}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:404.4719101123595,totalRequests:35998,latency:{max:45.062143,min:.365328,mean:.48585700000000004,pstdev:.49808199999999997,percentiles:{p50:.452351,p75:.46663899999999997,p80:.46991900000000003,p90:.48545499999999997,p95:.515775,p99:1.080447,p999:6.436607}},resources:{envoyGateway:{memory:{max:150.08984375,min:146.44921875,mean:147.88671875},cpu:{max:1.2000000000000455,min:.933333333333337,mean:1.0603174603174614}},envoyProxy:{memory:{max:141.55078125,min:139.140625,mean:139.66901041666668},cpu:{max:10.07732827919727,min:6.752312228571138,mean:9.510461390746068}}},poolOverflow:2,upstreamConnections:11,counters:{"benchmark.http_2xx":{value:35998,perSecond:404.4719101123595},"benchmark.pool_overflow":{value:2,perSecond:.02247191011235955},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:11,perSecond:.12359550561797752},upstream_cx_rx_bytes_total:{value:5651686,perSecond:63502.089887640446},upstream_cx_total:{value:11,perSecond:.12359550561797752},upstream_cx_tx_bytes_total:{value:1619910,perSecond:18201.23595505618},upstream_rq_pending_overflow:{value:2,perSecond:.02247191011235955},upstream_rq_pending_total:{value:11,perSecond:.12359550561797752},upstream_rq_total:{value:35998,perSecond:404.4719101123595}}}]},wse={metadata:{version:"1.6.7",runId:"1.6.7-release-2026-04-27",date:"2026-04-27T20:16:54Z",environment:"GitHub Release",description:"Benchmark results for version 1.6.7 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.6.7/benchmark_report.zip",testConfiguration:{connections:100,cpuLimit:"1000m",duration:90,memoryLimit:"2000Mi",rps:100}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:399.9222222222222,totalRequests:35993,latency:{max:47.067135,min:.378944,mean:.49701,pstdev:.540569,percentiles:{p50:.455535,p75:.474767,p80:.480495,p90:.503663,p95:.547071,p99:1.226175,p999:6.373119}},resources:{envoyGateway:{memory:{max:139.1484375,min:119.875,mean:134.18802083333333},cpu:{max:.9333333333333335,min:.3333333333333336,mean:.5288888888888891}},envoyProxy:{memory:{max:28.12109375,min:4.859375,mean:25.583072916666666},cpu:{max:10.268738200125863,min:5.4939283145112325,mean:7.653110203221817}}},poolOverflow:7,upstreamConnections:12,counters:{"benchmark.http_2xx":{value:35993,perSecond:399.9222222222222},"benchmark.pool_overflow":{value:7,perSecond:.07777777777777778},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:12,perSecond:.13333333333333333},upstream_cx_rx_bytes_total:{value:5650901,perSecond:62787.78888888889},upstream_cx_total:{value:12,perSecond:.13333333333333333},upstream_cx_tx_bytes_total:{value:1619685,perSecond:17996.5},upstream_rq_pending_overflow:{value:7,perSecond:.07777777777777778},upstream_rq_pending_total:{value:12,perSecond:.13333333333333333},upstream_rq_total:{value:35993,perSecond:399.9222222222222}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1212.438202247191,totalRequests:107907,latency:{max:61.036543,min:.345056,mean:.49985100000000005,pstdev:.832388,percentiles:{p50:.45359900000000003,p75:.467951,p80:.472831,p90:.49551900000000004,p95:.5390389999999999,p99:1.290431,p999:7.4393590000000005}},resources:{envoyGateway:{memory:{max:147.07421875,min:140.265625,mean:143.76028645833333},cpu:{max:2.1333333333333337,min:.40000000000000036,mean:.7977777777777771}},envoyProxy:{memory:{max:33.90625,min:27.37890625,mean:32.03515625},cpu:{max:30.00747150259066,min:30.00747150259066,mean:30.00747150259066}}},poolOverflow:93,upstreamConnections:34,counters:{"benchmark.http_2xx":{value:107907,perSecond:1212.438202247191},"benchmark.pool_overflow":{value:93,perSecond:1.0449438202247192},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:34,perSecond:.38202247191011235},upstream_cx_rx_bytes_total:{value:16941399,perSecond:190352.79775280898},upstream_cx_total:{value:34,perSecond:.38202247191011235},upstream_cx_tx_bytes_total:{value:4855815,perSecond:54559.7191011236},upstream_rq_pending_overflow:{value:93,perSecond:1.0449438202247192},upstream_rq_pending_total:{value:34,perSecond:.38202247191011235},upstream_rq_total:{value:107907,perSecond:1212.438202247191}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:1997.611111111111,totalRequests:179785,latency:{max:90.980351,min:.3476,mean:.521672,pstdev:.9244789999999999,percentiles:{p50:.452687,p75:.474287,p80:.48307100000000003,p90:.5064470000000001,p95:.586111,p99:1.869439,p999:10.968063}},resources:{envoyGateway:{memory:{max:147.62890625,min:138.10546875,mean:145.30078125},cpu:{max:2.7999999999999994,min:.5333333333333339,mean:.9888888888888888}},envoyProxy:{memory:{max:40.01171875,min:37.4765625,mean:38.424869791666666},cpu:{max:49.459333478544984,min:34.124251895301164,mean:46.837576796026426}}},poolOverflow:213,upstreamConnections:59,counters:{"benchmark.http_2xx":{value:179785,perSecond:1997.611111111111},"benchmark.pool_overflow":{value:213,perSecond:2.3666666666666667},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:59,perSecond:.6555555555555556},upstream_cx_rx_bytes_total:{value:28226245,perSecond:313624.94444444444},upstream_cx_total:{value:59,perSecond:.6555555555555556},upstream_cx_tx_bytes_total:{value:8090415,perSecond:89893.5},upstream_rq_pending_overflow:{value:213,perSecond:2.3666666666666667},upstream_rq_pending_total:{value:59,perSecond:.6555555555555556},upstream_rq_total:{value:179787,perSecond:1997.6333333333334}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3198.7555555555555,totalRequests:287888,latency:{max:151.90425499999998,min:.326016,mean:1.168468,pstdev:5.222306000000001,percentiles:{p50:.531871,p75:.633407,p80:.693887,p90:.9335669999999999,p95:1.418751,p99:21.561343,p999:76.386303}},resources:{envoyGateway:{memory:{max:159.078125,min:144.9375,mean:153.85286458333334},cpu:{max:5,min:.6666666666666643,mean:1.5444444444444447}},envoyProxy:{memory:{max:72.27734375,min:59.99609375,mean:66.97721354166667},cpu:{max:77.5605855855856,min:46.243881959734054,mean:65.97234530390695}}},poolOverflow:112,upstreamConnections:240,counters:{"benchmark.http_2xx":{value:287888,perSecond:3198.7555555555555},"benchmark.pool_overflow":{value:112,perSecond:1.2444444444444445},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:240,perSecond:2.6666666666666665},upstream_cx_rx_bytes_total:{value:45198416,perSecond:502204.6222222222},upstream_cx_total:{value:240,perSecond:2.6666666666666665},upstream_cx_tx_bytes_total:{value:12954960,perSecond:143944},upstream_rq_pending_overflow:{value:112,perSecond:1.2444444444444445},upstream_rq_pending_total:{value:240,perSecond:2.6666666666666665},upstream_rq_total:{value:287888,perSecond:3198.7555555555555}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3998.777777777778,totalRequests:359890,latency:{max:202.014719,min:.329824,mean:3.292303,pstdev:13.431645000000001,percentiles:{p50:.566399,p75:.771711,p80:.860031,p90:1.660223,p95:8.354559,p99:81.367039,p999:141.672447}},resources:{envoyGateway:{memory:{max:164.703125,min:157.4453125,mean:161.54361979166666},cpu:{max:7.666666666666658,min:.933333333333337,mean:2.0888889022222217}},envoyProxy:{memory:{max:98.875,min:89.01171875,mean:94.38020833333333},cpu:{max:95.24843349258227,min:92.57570059190199,mean:93.24388381707206}}},poolOverflow:107,upstreamConnections:293,counters:{"benchmark.http_2xx":{value:359890,perSecond:3998.777777777778},"benchmark.pool_overflow":{value:107,perSecond:1.1888888888888889},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:293,perSecond:3.2555555555555555},upstream_cx_rx_bytes_total:{value:56502730,perSecond:627808.1111111111},upstream_cx_total:{value:293,perSecond:3.2555555555555555},upstream_cx_tx_bytes_total:{value:16195185,perSecond:179946.5},upstream_rq_pending_overflow:{value:107,perSecond:1.1888888888888889},upstream_rq_pending_total:{value:293,perSecond:3.2555555555555555},upstream_rq_total:{value:359893,perSecond:3998.811111111111}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:4983.211111111111,totalRequests:448489,latency:{max:216.915967,min:.41708799999999996,mean:46.134673,pstdev:35.280172,percentiles:{p50:33.787903,p75:76.439551,p80:80.596991,p90:92.073983,p95:100.651007,p99:120.58623899999999,p999:180.092927}},resources:{envoyGateway:{memory:{max:196.02734375,min:184.22265625,mean:190.77174479166666},cpu:{max:14.133333333333365,min:.7330889703432152,mean:2.902090894976589}},envoyProxy:{memory:{max:155.6484375,min:149.3828125,mean:154.801953125},cpu:{max:100.0690987454784,min:99.85133052721676,mean:99.94811640199971}}},poolOverflow:161,upstreamConnections:239,counters:{"benchmark.http_2xx":{value:448489,perSecond:4983.211111111111},"benchmark.pool_overflow":{value:161,perSecond:1.788888888888889},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:239,perSecond:2.6555555555555554},upstream_cx_rx_bytes_total:{value:70412773,perSecond:782364.1444444444},upstream_cx_total:{value:239,perSecond:2.6555555555555554},upstream_cx_tx_bytes_total:{value:20186415,perSecond:224293.5},upstream_rq_pending_overflow:{value:161,perSecond:1.788888888888889},upstream_rq_pending_total:{value:239,perSecond:2.6555555555555554},upstream_rq_total:{value:448587,perSecond:4984.3}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3997.8555555555554,totalRequests:359807,latency:{max:166.436863,min:.32673599999999997,mean:2.4847099999999998,pstdev:10.041276,percentiles:{p50:.543615,p75:.7288629999999999,p80:.817535,p90:1.6024310000000002,p95:5.248511,p99:65.257471,p999:98.025471}},resources:{envoyGateway:{memory:{max:191.90234375,min:172.84375,mean:178.55078125},cpu:{max:3.1333333333333253,min:.9999999999999432,mean:1.520000000000001}},envoyProxy:{memory:{max:154.890625,min:153.66015625,mean:154.521484375},cpu:{max:96.44166481933075,min:52.320209673316576,mean:88.50193902863825}}},poolOverflow:193,upstreamConnections:207,counters:{"benchmark.http_2xx":{value:359807,perSecond:3997.8555555555554},"benchmark.pool_overflow":{value:193,perSecond:2.1444444444444444},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:207,perSecond:2.3},upstream_cx_rx_bytes_total:{value:56489699,perSecond:627663.3222222222},upstream_cx_total:{value:207,perSecond:2.3},upstream_cx_tx_bytes_total:{value:16191315,perSecond:179903.5},upstream_rq_pending_overflow:{value:193,perSecond:2.1444444444444444},upstream_rq_pending_total:{value:207,perSecond:2.3},upstream_rq_total:{value:359807,perSecond:3997.8555555555554}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3198.222222222222,totalRequests:287840,latency:{max:110.284799,min:.321408,mean:1.079807,pstdev:4.7962739999999995,percentiles:{p50:.512159,p75:.591199,p80:.6246389999999999,p90:.794207,p95:1.124415,p99:21.080063,p999:69.353471}},resources:{envoyGateway:{memory:{max:171.6640625,min:155.78515625,mean:160.75598958333333},cpu:{max:1.1999999999999509,min:1.066666666666644,mean:1.0956521739130352}},envoyProxy:{memory:{max:154.83984375,min:148.24609375,mean:149.51236979166666},cpu:{max:77.58169163932948,min:42.21342170869475,mean:61.567339702727715}}},poolOverflow:158,upstreamConnections:209,counters:{"benchmark.http_2xx":{value:287840,perSecond:3198.222222222222},"benchmark.pool_overflow":{value:158,perSecond:1.7555555555555555},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:209,perSecond:2.3222222222222224},upstream_cx_rx_bytes_total:{value:45190880,perSecond:502120.8888888889},upstream_cx_total:{value:209,perSecond:2.3222222222222224},upstream_cx_tx_bytes_total:{value:12952845,perSecond:143920.5},upstream_rq_pending_overflow:{value:158,perSecond:1.7555555555555555},upstream_rq_pending_total:{value:209,perSecond:2.3222222222222224},upstream_rq_total:{value:287841,perSecond:3198.233333333333}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:1996.7222222222222,totalRequests:179705,latency:{max:111.64876699999999,min:.353088,mean:.518911,pstdev:1.016197,percentiles:{p50:.456271,p75:.469279,p80:.473775,p90:.501503,p95:.581151,p99:1.7482229999999999,p999:8.471039}},resources:{envoyGateway:{memory:{max:158.65234375,min:149.59765625,mean:153.23697916666666},cpu:{max:1.1333333333333446,min:1.066666666666644,mean:1.0833333333333186}},envoyProxy:{memory:{max:148.0859375,min:147.0859375,mean:147.59361979166667},cpu:{max:50.94044791886718,min:50.70775568181835,mean:50.8628838398509}}},poolOverflow:295,upstreamConnections:59,counters:{"benchmark.http_2xx":{value:179705,perSecond:1996.7222222222222},"benchmark.pool_overflow":{value:295,perSecond:3.2777777777777777},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:59,perSecond:.6555555555555556},upstream_cx_rx_bytes_total:{value:28213685,perSecond:313485.3888888889},upstream_cx_total:{value:59,perSecond:.6555555555555556},upstream_cx_tx_bytes_total:{value:8086725,perSecond:89852.5},upstream_rq_pending_overflow:{value:295,perSecond:3.2777777777777777},upstream_rq_pending_total:{value:59,perSecond:.6555555555555556},upstream_rq_total:{value:179705,perSecond:1996.7222222222222}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1212.5056179775281,totalRequests:107913,latency:{max:79.536127,min:.34924799999999995,mean:.540723,pstdev:.816151,percentiles:{p50:.468959,p75:.522239,p80:.537631,p90:.5840310000000001,p95:.6754870000000001,p99:1.557567,p999:9.940991}},resources:{envoyGateway:{memory:{max:151.6484375,min:148.71484375,mean:150.14205729166667},cpu:{max:1.066666666666644,min:1.0000000000000377,mean:1.0515151515151426}},envoyProxy:{memory:{max:147.75390625,min:146.85546875,mean:147.240625},cpu:{max:30.839552297012645,min:20.589903930428164,mean:27.965147793636593}}},poolOverflow:86,upstreamConnections:40,counters:{"benchmark.http_2xx":{value:107913,perSecond:1212.5056179775281},"benchmark.pool_overflow":{value:86,perSecond:.9662921348314607},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:40,perSecond:.449438202247191},upstream_cx_rx_bytes_total:{value:16942341,perSecond:190363.38202247192},upstream_cx_total:{value:40,perSecond:.449438202247191},upstream_cx_tx_bytes_total:{value:4856085,perSecond:54562.752808988764},upstream_rq_pending_overflow:{value:86,perSecond:.9662921348314607},upstream_rq_pending_total:{value:40,perSecond:.449438202247191},upstream_rq_total:{value:107913,perSecond:1212.5056179775281}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:404.39325842696627,totalRequests:35991,latency:{max:43.788287000000004,min:.36227200000000004,mean:.493254,pstdev:.590515,percentiles:{p50:.455775,p75:.47031900000000004,p80:.47356699999999996,p90:.489807,p95:.522671,p99:1.0246389999999999,p999:8.825343}},resources:{envoyGateway:{memory:{max:150.1953125,min:145.38671875,mean:147.28645833333334},cpu:{max:1.1333333333333446,min:.933333333333337,mean:1.0499933546663929}},envoyProxy:{memory:{max:147.5703125,min:146.84375,mean:147.04609375},cpu:{max:10.200383393028265,min:9.953618421052257,mean:10.07700090704026}}},poolOverflow:9,upstreamConnections:12,counters:{"benchmark.http_2xx":{value:35991,perSecond:404.39325842696627},"benchmark.pool_overflow":{value:9,perSecond:.10112359550561797},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:12,perSecond:.1348314606741573},upstream_cx_rx_bytes_total:{value:5650587,perSecond:63489.74157303371},upstream_cx_total:{value:12,perSecond:.1348314606741573},upstream_cx_tx_bytes_total:{value:1619595,perSecond:18197.696629213482},upstream_rq_pending_overflow:{value:9,perSecond:.10112359550561797},upstream_rq_pending_total:{value:12,perSecond:.1348314606741573},upstream_rq_total:{value:35991,perSecond:404.39325842696627}}}]},bse={metadata:{version:"1.7.3",runId:"1.7.3-release-2026-05-09",date:"2026-05-09T23:13:52Z",environment:"GitHub Release",description:"Benchmark results for version 1.7.3 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.7.3/benchmark_report.zip",testConfiguration:{connections:100,cpuLimit:"1000m",duration:90,memoryLimit:"2000Mi",rps:100}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:404.44943820224717,totalRequests:35996,latency:{max:46.344191,min:.38296,mean:.535867,pstdev:.58933,percentiles:{p50:.47548700000000005,p75:.496943,p80:.5047670000000001,p90:.541695,p95:.627551,p99:2.049343,p999:7.107583}},resources:{envoyGateway:{memory:{max:137.67578125,min:117.6484375,mean:135.65533854166668},cpu:{max:1.4000000000000006,min:.3333333333333336,mean:.6252873563218392}},envoyProxy:{memory:{max:24.73828125,min:24.26953125,mean:24.435807291666666},cpu:{max:10.468080415045396,min:10.427154828411808,mean:10.433975759517407}}},poolOverflow:4,upstreamConnections:12,counters:{"benchmark.http_2xx":{value:35996,perSecond:404.44943820224717},"benchmark.pool_overflow":{value:4,perSecond:.0449438202247191},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:12,perSecond:.1348314606741573},upstream_cx_rx_bytes_total:{value:5651372,perSecond:63498.56179775281},upstream_cx_total:{value:12,perSecond:.1348314606741573},upstream_cx_tx_bytes_total:{value:1619820,perSecond:18200.224719101123},upstream_rq_pending_overflow:{value:4,perSecond:.0449438202247191},upstream_rq_pending_total:{value:12,perSecond:.1348314606741573},upstream_rq_total:{value:35996,perSecond:404.44943820224717}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1212.7191011235955,totalRequests:107932,latency:{max:56.348671,min:.352256,mean:.5176000000000001,pstdev:.836032,percentiles:{p50:.458511,p75:.47571100000000005,p80:.482431,p90:.511647,p95:.579231,p99:1.619263,p999:10.062335000000001}},resources:{envoyGateway:{memory:{max:147.06640625,min:137.546875,mean:144.12955729166666},cpu:{max:2.0666666666666655,min:.40000000000000036,mean:.7888888888888892}},envoyProxy:{memory:{max:31.00390625,min:28.80078125,mean:30.55546875},cpu:{max:31.896429069605237,min:20.159596644847134,mean:29.888655497563743}}},poolOverflow:68,upstreamConnections:40,counters:{"benchmark.http_2xx":{value:107932,perSecond:1212.7191011235955},"benchmark.pool_overflow":{value:68,perSecond:.7640449438202247},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:40,perSecond:.449438202247191},upstream_cx_rx_bytes_total:{value:16945324,perSecond:190396.8988764045},upstream_cx_total:{value:40,perSecond:.449438202247191},upstream_cx_tx_bytes_total:{value:4856940,perSecond:54572.3595505618},upstream_rq_pending_overflow:{value:68,perSecond:.7640449438202247},upstream_rq_pending_total:{value:40,perSecond:.449438202247191},upstream_rq_total:{value:107932,perSecond:1212.7191011235955}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:1999.2666666666667,totalRequests:179934,latency:{max:982.4829430000001,min:.33972800000000003,mean:2.467626,pstdev:30.439479,percentiles:{p50:.45207899999999995,p75:.479439,p80:.488863,p90:.567295,p95:.8977269999999999,p99:37.341183,p999:379.46982299999996}},resources:{envoyGateway:{memory:{max:148.5703125,min:138.1640625,mean:145.23307291666666},cpu:{max:2.7999999999999994,min:.5999999999999991,mean:1.0733333333333335}},envoyProxy:{memory:{max:47.19140625,min:34.671875,mean:43.625390625},cpu:{max:48.564002664002736,min:28.511621210313688,mean:42.71705709892529}}},poolOverflow:66,upstreamConnections:334,counters:{"benchmark.http_2xx":{value:179934,perSecond:1999.2666666666667},"benchmark.pool_overflow":{value:66,perSecond:.7333333333333333},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:334,perSecond:3.7111111111111112},upstream_cx_rx_bytes_total:{value:28249638,perSecond:313884.86666666664},upstream_cx_total:{value:334,perSecond:3.7111111111111112},upstream_cx_tx_bytes_total:{value:8097030,perSecond:89967},upstream_rq_pending_overflow:{value:66,perSecond:.7333333333333333},upstream_rq_pending_total:{value:334,perSecond:3.7111111111111112},upstream_rq_total:{value:179934,perSecond:1999.2666666666667}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3199.4,totalRequests:287946,latency:{max:3029.991423,min:.3276,mean:4.983300000000001,pstdev:62.79289000000001,percentiles:{p50:.623775,p75:.809791,p80:.916447,p90:1.6968949999999998,p95:11.373567,p99:65.62815900000001,p999:194.78937499999998}},resources:{envoyGateway:{memory:{max:151.1015625,min:143.8828125,mean:149.07669270833333},cpu:{max:5.400000000000003,min:.86666666666666,mean:1.8244444444444445}},envoyProxy:{memory:{max:71.67578125,min:63.6171875,mean:68.65364583333333},cpu:{max:77.8570545746389,min:51.385197588890605,mean:68.08387131390853}}},poolOverflow:52,upstreamConnections:348,counters:{"benchmark.http_2xx":{value:287946,perSecond:3199.4},"benchmark.pool_overflow":{value:52,perSecond:.5777777777777777},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:348,perSecond:3.8666666666666667},upstream_cx_rx_bytes_total:{value:45207522,perSecond:502305.8},upstream_cx_total:{value:348,perSecond:3.8666666666666667},upstream_cx_tx_bytes_total:{value:12957660,perSecond:143974},upstream_rq_pending_overflow:{value:52,perSecond:.5777777777777777},upstream_rq_pending_total:{value:348,perSecond:3.8666666666666667},upstream_rq_total:{value:287948,perSecond:3199.4222222222224}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3997.9777777777776,totalRequests:359818,latency:{max:244.654079,min:.332464,mean:2.5921220000000003,pstdev:9.425811,percentiles:{p50:.7054389999999999,p75:.918815,p80:1.020703,p90:1.9464949999999999,p95:6.685439,p99:62.543871,p999:90.509311}},resources:{envoyGateway:{memory:{max:168.64453125,min:162.08203125,mean:166.54466145833334},cpu:{max:8.066666666666672,min:.9999999999999905,mean:2.2821052102695236}},envoyProxy:{memory:{max:89.4921875,min:85.69140625,mean:88.01627604166667},cpu:{max:0,min:0,mean:0}}},poolOverflow:179,upstreamConnections:221,counters:{"benchmark.http_2xx":{value:359818,perSecond:3997.9777777777776},"benchmark.pool_overflow":{value:179,perSecond:1.988888888888889},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:221,perSecond:2.4555555555555557},upstream_cx_rx_bytes_total:{value:56491426,perSecond:627682.5111111111},upstream_cx_total:{value:221,perSecond:2.4555555555555557},upstream_cx_tx_bytes_total:{value:16191945,perSecond:179910.5},upstream_rq_pending_overflow:{value:179,perSecond:1.988888888888889},upstream_rq_pending_total:{value:221,perSecond:2.4555555555555557},upstream_rq_total:{value:359821,perSecond:3998.011111111111}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5138.511111111111,totalRequests:462466,latency:{max:950.337535,min:1.663616,mean:49.312019,pstdev:14.934874,percentiles:{p50:48.105470999999994,p75:54.161407000000004,p80:55.447551,p90:58.933247,p95:63.86278300000001,p99:102.187007,p999:155.000831}},resources:{envoyGateway:{memory:{max:188.54296875,min:179.57421875,mean:186.373046875},cpu:{max:13.933333333333357,min:1.0000000000000377,mean:3.299999999999998}},envoyProxy:{memory:{max:148.27734375,min:134.01953125,mean:142.86770833333333},cpu:{max:99.96877736845785,min:51.17226004171184,mean:86.03022160635253}}},poolOverflow:145,upstreamConnections:255,counters:{"benchmark.http_2xx":{value:462466,perSecond:5138.511111111111},"benchmark.pool_overflow":{value:145,perSecond:1.6111111111111112},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:255,perSecond:2.8333333333333335},upstream_cx_rx_bytes_total:{value:72607162,perSecond:806746.2444444444},upstream_cx_total:{value:255,perSecond:2.8333333333333335},upstream_cx_tx_bytes_total:{value:20822220,perSecond:231358},upstream_rq_pending_overflow:{value:145,perSecond:1.6111111111111112},upstream_rq_pending_total:{value:255,perSecond:2.8333333333333335},upstream_rq_total:{value:462716,perSecond:5141.288888888889}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3998.5,totalRequests:359865,latency:{max:2133.524479,min:.33208,mean:6.480329,pstdev:35.650090000000006,percentiles:{p50:.727711,p75:1.060223,p80:1.356671,p90:9.771519,p95:44.038143000000005,p99:90.968063,p999:164.429823}},resources:{envoyGateway:{memory:{max:179.8125,min:162.421875,mean:170.29466145833334},cpu:{max:1.2666666666666515,min:.8666666666666363,mean:1.1565217391304292}},envoyProxy:{memory:{max:144.08203125,min:142.3828125,mean:143.41341145833334},cpu:{max:65.76390265911255,min:44.97408887731358,mean:54.14164684504709}}},poolOverflow:132,upstreamConnections:268,counters:{"benchmark.http_2xx":{value:359865,perSecond:3998.5},"benchmark.pool_overflow":{value:132,perSecond:1.4666666666666666},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:268,perSecond:2.977777777777778},upstream_cx_rx_bytes_total:{value:56498805,perSecond:627764.5},upstream_cx_total:{value:268,perSecond:2.977777777777778},upstream_cx_tx_bytes_total:{value:16194060,perSecond:179934},upstream_rq_pending_overflow:{value:132,perSecond:1.4666666666666666},upstream_rq_pending_total:{value:268,perSecond:2.977777777777778},upstream_rq_total:{value:359868,perSecond:3998.5333333333333}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3182.8333333333335,totalRequests:286455,latency:{max:489.89798299999995,min:.330016,mean:2.042146,pstdev:11.847002,percentiles:{p50:.615935,p75:.7458229999999999,p80:.833087,p90:1.343807,p95:2.417791,p99:46.784511,p999:224.002047}},resources:{envoyGateway:{memory:{max:169.71875,min:156.6015625,mean:164.18645833333332},cpu:{max:1.3333333333333524,min:1.066666666666644,mean:1.1650793650793705}},envoyProxy:{memory:{max:142.4296875,min:141.1640625,mean:141.56002604166667},cpu:{max:73.5007114191903,min:43.6545225355711,mean:65.09343172003922}}},poolOverflow:126,upstreamConnections:274,counters:{"benchmark.http_2xx":{value:286455,perSecond:3182.8333333333335},"benchmark.pool_overflow":{value:126,perSecond:1.4},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:274,perSecond:3.0444444444444443},upstream_cx_rx_bytes_total:{value:44973435,perSecond:499704.8333333333},upstream_cx_total:{value:274,perSecond:3.0444444444444443},upstream_cx_tx_bytes_total:{value:12902805,perSecond:143364.5},upstream_rq_pending_overflow:{value:126,perSecond:1.4},upstream_rq_pending_total:{value:274,perSecond:3.0444444444444443},upstream_rq_total:{value:286729,perSecond:3185.8777777777777}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:1998.388888888889,totalRequests:179855,latency:{max:147.406847,min:.339904,mean:.5224789999999999,pstdev:.6352289999999999,percentiles:{p50:.453471,p75:.47263900000000003,p80:.478431,p90:.517999,p95:.724191,p99:2.087359,p999:7.226879}},resources:{envoyGateway:{memory:{max:156.8125,min:147.4296875,mean:150.44973958333333},cpu:{max:1.2666666666666517,min:1.066666666666644,mean:1.1277777777777709}},envoyProxy:{memory:{max:140.5390625,min:140.19921875,mean:140.38294270833333},cpu:{max:51.33240404359542,min:33.86808667887703,mean:48.447040965036784}}},poolOverflow:142,upstreamConnections:48,counters:{"benchmark.http_2xx":{value:179855,perSecond:1998.388888888889},"benchmark.pool_overflow":{value:142,perSecond:1.5777777777777777},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:48,perSecond:.5333333333333333},upstream_cx_rx_bytes_total:{value:28237235,perSecond:313747.05555555556},upstream_cx_total:{value:48,perSecond:.5333333333333333},upstream_cx_tx_bytes_total:{value:8093610,perSecond:89929},upstream_rq_pending_overflow:{value:142,perSecond:1.5777777777777777},upstream_rq_pending_total:{value:48,perSecond:.5333333333333333},upstream_rq_total:{value:179858,perSecond:1998.4222222222222}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1198.9,totalRequests:107901,latency:{max:91.013119,min:.36744000000000004,mean:.51687,pstdev:1.1865809999999999,percentiles:{p50:.455055,p75:.471199,p80:.476111,p90:.499823,p95:.548223,p99:1.549503,p999:8.814591}},resources:{envoyGateway:{memory:{max:150.85546875,min:148.97265625,mean:149.60885416666667},cpu:{max:1.2666666666666515,min:1.0000000000000377,mean:1.1142857142857159}},envoyProxy:{memory:{max:140.7421875,min:139.89453125,mean:140.21901041666666},cpu:{max:30.88898623279097,min:19.699947025365148,mean:27.62057691682817}}},poolOverflow:99,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:107901,perSecond:1198.9},"benchmark.pool_overflow":{value:99,perSecond:1.1},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:37,perSecond:.4111111111111111},upstream_cx_rx_bytes_total:{value:16940457,perSecond:188227.3},upstream_cx_total:{value:37,perSecond:.4111111111111111},upstream_cx_tx_bytes_total:{value:4855545,perSecond:53950.5},upstream_rq_pending_overflow:{value:99,perSecond:1.1},upstream_rq_pending_total:{value:37,perSecond:.4111111111111111},upstream_rq_total:{value:107901,perSecond:1198.9}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:404.39325842696627,totalRequests:35991,latency:{max:64.180223,min:.3844,mean:.502389,pstdev:.691644,percentiles:{p50:.45702299999999996,p75:.473823,p80:.479103,p90:.5029750000000001,p95:.541279,p99:1.187135,p999:8.559103}},resources:{envoyGateway:{memory:{max:150.90625,min:144.01953125,mean:146.19817708333332},cpu:{max:1.2666666666666515,min:1.066666666666644,mean:1.1391304347826023}},envoyProxy:{memory:{max:140.7421875,min:139.96875,mean:140.19140625},cpu:{max:0,min:0,mean:0}}},poolOverflow:9,upstreamConnections:15,counters:{"benchmark.http_2xx":{value:35991,perSecond:404.39325842696627},"benchmark.pool_overflow":{value:9,perSecond:.10112359550561797},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:15,perSecond:.16853932584269662},upstream_cx_rx_bytes_total:{value:5650587,perSecond:63489.74157303371},upstream_cx_total:{value:15,perSecond:.16853932584269662},upstream_cx_tx_bytes_total:{value:1619595,perSecond:18197.696629213482},upstream_rq_pending_overflow:{value:9,perSecond:.10112359550561797},upstream_rq_pending_total:{value:15,perSecond:.16853932584269662},upstream_rq_total:{value:35991,perSecond:404.39325842696627}}}]},Sse={metadata:{version:"1.8.0",runId:"1.8.0-release-2026-05-13",date:"2026-05-13T15:45:46Z",environment:"GitHub Release",description:"Benchmark results for version 1.8.0 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.8.0/benchmark_report.zip",testConfiguration:{connections:100,cpuLimit:"1000m",duration:90,memoryLimit:"2000Mi",rps:100}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:404.39325842696627,totalRequests:35991,latency:{max:60.844031,min:.37550399999999995,mean:.48515800000000003,pstdev:.5689510000000001,percentiles:{p50:.442959,p75:.460783,p80:.464623,p90:.481535,p95:.519087,p99:1.1913589999999998,p999:6.606847}},resources:{envoyGateway:{memory:{max:129.33984375,min:101.58984375,mean:122.695703125},cpu:{max:.46666666666666673,min:.33333333333333287,mean:.4111111111111112}},envoyProxy:{memory:{max:20.86328125,min:7.546875,mean:18.339574353448278},cpu:{max:10.287521430320846,min:5.4345973605157,mean:8.106397471790913}}},poolOverflow:9,upstreamConnections:12,counters:{"benchmark.http_2xx":{value:35991,perSecond:404.39325842696627},"benchmark.pool_overflow":{value:9,perSecond:.10112359550561797},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:12,perSecond:.1348314606741573},upstream_cx_rx_bytes_total:{value:5650587,perSecond:63489.74157303371},upstream_cx_total:{value:12,perSecond:.1348314606741573},upstream_cx_tx_bytes_total:{value:1619595,perSecond:18197.696629213482},upstream_rq_pending_overflow:{value:9,perSecond:.10112359550561797},upstream_rq_pending_total:{value:12,perSecond:.1348314606741573},upstream_rq_total:{value:35991,perSecond:404.39325842696627}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1212.4943820224719,totalRequests:107912,latency:{max:92.65151900000001,min:.339872,mean:.498101,pstdev:.9952330000000001,percentiles:{p50:.445919,p75:.461375,p80:.466127,p90:.49267099999999997,p95:.547999,p99:1.456383,p999:5.356287}},resources:{envoyGateway:{memory:{max:134.60546875,min:127.90625,mean:132.28541666666666},cpu:{max:.6000000000000005,min:.39999999999999886,mean:.4869565217391301}},envoyProxy:{memory:{max:24.96875,min:20.359375,mean:23.803125},cpu:{max:29.920842185542302,min:21.45938352063402,mean:28.947064689830615}}},poolOverflow:88,upstreamConnections:32,counters:{"benchmark.http_2xx":{value:107912,perSecond:1212.4943820224719},"benchmark.pool_overflow":{value:88,perSecond:.9887640449438202},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:32,perSecond:.3595505617977528},upstream_cx_rx_bytes_total:{value:16942184,perSecond:190361.61797752808},upstream_cx_total:{value:32,perSecond:.3595505617977528},upstream_cx_tx_bytes_total:{value:4856040,perSecond:54562.247191011236},upstream_rq_pending_overflow:{value:88,perSecond:.9887640449438202},upstream_rq_pending_total:{value:32,perSecond:.3595505617977528},upstream_rq_total:{value:107912,perSecond:1212.4943820224719}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:1999.0222222222221,totalRequests:179912,latency:{max:63.74195100000001,min:.348576,mean:.518629,pstdev:.836542,percentiles:{p50:.44159899999999996,p75:.46043100000000003,p80:.46492700000000003,p90:.497487,p95:.683295,p99:2.061119,p999:11.345407}},resources:{envoyGateway:{memory:{max:140.12890625,min:131.4453125,mean:137.73307291666666},cpu:{max:.6666666666666672,min:.5333333333333339,mean:.5909090909090912}},envoyProxy:{memory:{max:29.26953125,min:24.78125,mean:28.626041666666666},cpu:{max:49.50165070307723,min:35.43637304454524,mean:48.11188505844771}}},poolOverflow:88,upstreamConnections:61,counters:{"benchmark.http_2xx":{value:179912,perSecond:1999.0222222222221},"benchmark.pool_overflow":{value:88,perSecond:.9777777777777777},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:61,perSecond:.6777777777777778},upstream_cx_rx_bytes_total:{value:28246184,perSecond:313846.4888888889},upstream_cx_total:{value:61,perSecond:.6777777777777778},upstream_cx_tx_bytes_total:{value:8096040,perSecond:89956},upstream_rq_pending_overflow:{value:88,perSecond:.9777777777777777},upstream_rq_pending_total:{value:61,perSecond:.6777777777777778},upstream_rq_total:{value:179912,perSecond:1999.0222222222221}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3199.5777777777776,totalRequests:287962,latency:{max:72.74905500000001,min:.317536,mean:.86458,pstdev:2.317196,percentiles:{p50:.594783,p75:.6669430000000001,p80:.711903,p90:.9254709999999999,p95:1.382655,p99:4.547071,p999:41.443327000000004}},resources:{envoyGateway:{memory:{max:148.8984375,min:142.625,mean:146.22877604166666},cpu:{max:28.4,min:.6666666666666643,mean:6.008873485589029}},envoyProxy:{memory:{max:48.43359375,min:32.796875,mean:43.454166666666666},cpu:{max:68.6065377149196,min:68.6065377149196,mean:68.6065377149196}}},poolOverflow:35,upstreamConnections:211,counters:{"benchmark.http_2xx":{value:287962,perSecond:3199.5777777777776},"benchmark.pool_overflow":{value:35,perSecond:.3888888888888889},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:211,perSecond:2.3444444444444446},upstream_cx_rx_bytes_total:{value:45210034,perSecond:502333.7111111111},upstream_cx_total:{value:211,perSecond:2.3444444444444446},upstream_cx_tx_bytes_total:{value:12958425,perSecond:143982.5},upstream_rq_pending_overflow:{value:35,perSecond:.3888888888888889},upstream_rq_pending_total:{value:211,perSecond:2.3444444444444446},upstream_rq_total:{value:287965,perSecond:3199.6111111111113}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3999.133333333333,totalRequests:359922,latency:{max:130.183167,min:.326256,mean:1.359798,pstdev:5.120169,percentiles:{p50:.644479,p75:.814079,p80:.8828790000000001,p90:1.238335,p95:2.279423,p99:21.554174999999997,p999:76.931071}},resources:{envoyGateway:{memory:{max:167.62109375,min:153.66015625,mean:164.03059895833334},cpu:{max:49.60000000000001,min:.7333333333333295,mean:9.057777777777776}},envoyProxy:{memory:{max:69.98828125,min:49.10546875,mean:63.48033854166667},cpu:{max:82.9537167555781,min:58.941972332206745,mean:78.03539083542282}}},poolOverflow:75,upstreamConnections:325,counters:{"benchmark.http_2xx":{value:359922,perSecond:3999.133333333333},"benchmark.pool_overflow":{value:75,perSecond:.8333333333333334},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:325,perSecond:3.611111111111111},upstream_cx_rx_bytes_total:{value:56507754,perSecond:627863.9333333333},upstream_cx_total:{value:325,perSecond:3.611111111111111},upstream_cx_tx_bytes_total:{value:16196580,perSecond:179962},upstream_rq_pending_overflow:{value:75,perSecond:.8333333333333334},upstream_rq_pending_total:{value:325,perSecond:3.611111111111111},upstream_rq_total:{value:359924,perSecond:3999.1555555555556}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:6043.5,totalRequests:543915,latency:{max:1135.345663,min:2.0096,mean:51.45764500000001,pstdev:15.012057,percentiles:{p50:51.800063,p75:57.352191,p80:58.351615,p90:60.934143000000006,p95:63.979518999999996,p99:90.02188699999999,p999:135.438335}},resources:{envoyGateway:{memory:{max:194.875,min:165.51953125,mean:192.38671875},cpu:{max:94.19999999999997,min:.8000000000000304,mean:16.59333333333334}},envoyProxy:{memory:{max:105.08984375,min:80.03125,mean:100.88229166666666},cpu:{max:99.56727514596123,min:68.13554583696704,mean:93.12984261229636}}},poolOverflow:87,upstreamConnections:313,counters:{"benchmark.http_2xx":{value:543915,perSecond:6043.5},"benchmark.pool_overflow":{value:87,perSecond:.9666666666666667},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:313,perSecond:3.477777777777778},upstream_cx_rx_bytes_total:{value:85394655,perSecond:948829.5},upstream_cx_total:{value:313,perSecond:3.477777777777778},upstream_cx_tx_bytes_total:{value:24490260,perSecond:272114},upstream_rq_pending_overflow:{value:87,perSecond:.9666666666666667},upstream_rq_pending_total:{value:313,perSecond:3.477777777777778},upstream_rq_total:{value:544228,perSecond:6046.977777777778}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3999.1222222222223,totalRequests:359921,latency:{max:124.64947099999999,min:.308336,mean:1.323936,pstdev:5.229215,percentiles:{p50:.634143,p75:.8154549999999999,p80:.889439,p90:1.2160630000000001,p95:2.128127,p99:18.499583,p999:82.882559}},resources:{envoyGateway:{memory:{max:173.19140625,min:163.875,mean:167.57057291666666},cpu:{max:1.1999999999999507,min:.933333333333337,mean:1.0363636363636282}},envoyProxy:{memory:{max:104.51171875,min:102.859375,mean:103.88216145833333},cpu:{max:82.94537447151188,min:59.30601867489608,mean:79.5770549883814}}},poolOverflow:75,upstreamConnections:322,counters:{"benchmark.http_2xx":{value:359921,perSecond:3999.1222222222223},"benchmark.pool_overflow":{value:75,perSecond:.8333333333333334},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:322,perSecond:3.577777777777778},upstream_cx_rx_bytes_total:{value:56507597,perSecond:627862.1888888889},upstream_cx_total:{value:322,perSecond:3.577777777777778},upstream_cx_tx_bytes_total:{value:16196625,perSecond:179962.5},upstream_rq_pending_overflow:{value:75,perSecond:.8333333333333334},upstream_rq_pending_total:{value:322,perSecond:3.577777777777778},upstream_rq_total:{value:359925,perSecond:3999.1666666666665}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3199.411111111111,totalRequests:287947,latency:{max:69.144575,min:.31392,mean:.8586320000000001,pstdev:2.1950279999999998,percentiles:{p50:.5969909999999999,p75:.683039,p80:.7361909999999999,p90:.993631,p95:1.4826869999999999,p99:4.3184629999999995,p999:40.722431}},resources:{envoyGateway:{memory:{max:172.1328125,min:153.3828125,mean:159.8359375},cpu:{max:1.0666666666667386,min:.933333333333337,mean:1.0166666666666662}},envoyProxy:{memory:{max:103.9296875,min:102.8984375,mean:103.58268229166667},cpu:{max:68.8044860276349,min:44.415199491315,mean:62.765503557186285}}},poolOverflow:52,upstreamConnections:189,counters:{"benchmark.http_2xx":{value:287947,perSecond:3199.411111111111},"benchmark.pool_overflow":{value:52,perSecond:.5777777777777777},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:189,perSecond:2.1},upstream_cx_rx_bytes_total:{value:45207679,perSecond:502307.5444444445},upstream_cx_total:{value:189,perSecond:2.1},upstream_cx_tx_bytes_total:{value:12957660,perSecond:143974},upstream_rq_pending_overflow:{value:52,perSecond:.5777777777777777},upstream_rq_pending_total:{value:189,perSecond:2.1},upstream_rq_total:{value:287948,perSecond:3199.4222222222224}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:2020.887640449438,totalRequests:179859,latency:{max:66.33676700000001,min:.32340800000000003,mean:.550293,pstdev:.861711,percentiles:{p50:.44910300000000003,p75:.540383,p80:.549759,p90:.6192949999999999,p95:.944383,p99:1.894911,p999:8.984063}},resources:{envoyGateway:{memory:{max:159.85546875,min:141.671875,mean:146.059765625},cpu:{max:1.1333333333333449,min:.933333333333337,mean:1.0363636363636408}},envoyProxy:{memory:{max:103.4765625,min:102.9609375,mean:103.1703125},cpu:{max:45.96425033467191,min:45.96425033467191,mean:45.96425033467191}}},poolOverflow:140,upstreamConnections:53,counters:{"benchmark.http_2xx":{value:179859,perSecond:2020.887640449438},"benchmark.pool_overflow":{value:140,perSecond:1.5730337078651686},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:53,perSecond:.5955056179775281},upstream_cx_rx_bytes_total:{value:28237863,perSecond:317279.3595505618},upstream_cx_total:{value:53,perSecond:.5955056179775281},upstream_cx_tx_bytes_total:{value:8093655,perSecond:90939.94382022473},upstream_rq_pending_overflow:{value:140,perSecond:1.5730337078651686},upstream_rq_pending_total:{value:53,perSecond:.5955056179775281},upstream_rq_total:{value:179859,perSecond:2020.887640449438}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1199.6555555555556,totalRequests:107969,latency:{max:29.548543,min:.342528,mean:.49396,pstdev:.46276,percentiles:{p50:.444223,p75:.463871,p80:.46807899999999997,p90:.496095,p95:.548479,p99:1.618303,p999:7.135999}},resources:{envoyGateway:{memory:{max:148.67578125,min:145.35546875,mean:147.05924479166666},cpu:{max:1.066666666666644,min:.8666666666666363,mean:.9666666666666638}},envoyProxy:{memory:{max:103.4765625,min:102.55859375,mean:102.98919270833333},cpu:{max:20.25151466666635,min:20.25151466666635,mean:20.25151466666635}}},poolOverflow:31,upstreamConnections:30,counters:{"benchmark.http_2xx":{value:107969,perSecond:1199.6555555555556},"benchmark.pool_overflow":{value:31,perSecond:.34444444444444444},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:30,perSecond:.3333333333333333},upstream_cx_rx_bytes_total:{value:16951133,perSecond:188345.92222222223},upstream_cx_total:{value:30,perSecond:.3333333333333333},upstream_cx_tx_bytes_total:{value:4858605,perSecond:53984.5},upstream_rq_pending_overflow:{value:31,perSecond:.34444444444444444},upstream_rq_pending_total:{value:30,perSecond:.3333333333333333},upstream_rq_total:{value:107969,perSecond:1199.6555555555556}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:399.9888888888889,totalRequests:35999,latency:{max:30.369791,min:.365792,mean:.49008500000000005,pstdev:.506989,percentiles:{p50:.44926299999999997,p75:.467951,p80:.47259100000000004,p90:.493983,p95:.5300469999999999,p99:1.070783,p999:7.098879}},resources:{envoyGateway:{memory:{max:147.73046875,min:138.51171875,mean:141.698046875},cpu:{max:1.1333333333333446,min:.933333333333337,mean:1.0272727272727271}},envoyProxy:{memory:{max:103.16015625,min:102.6015625,mean:102.71276041666667},cpu:{max:10.248671815326777,min:6.000252904630225,mean:9.154973976397287}}},poolOverflow:1,upstreamConnections:10,counters:{"benchmark.http_2xx":{value:35999,perSecond:399.9888888888889},"benchmark.pool_overflow":{value:1,perSecond:.011111111111111112},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:10,perSecond:.1111111111111111},upstream_cx_rx_bytes_total:{value:5651843,perSecond:62798.25555555556},upstream_cx_total:{value:10,perSecond:.1111111111111111},upstream_cx_tx_bytes_total:{value:1619955,perSecond:17999.5},upstream_rq_pending_overflow:{value:1,perSecond:.011111111111111112},upstream_rq_pending_total:{value:10,perSecond:.1111111111111111},upstream_rq_total:{value:35999,perSecond:399.9888888888889}}}]},Pse={metadata:{version:"1.8.1",runId:"1.8.1-release-2026-06-05",date:"2026-06-05T07:32:33Z",environment:"GitHub Release",description:"Benchmark results for version 1.8.1 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.8.1/benchmark_report.zip",testConfiguration:{connections:100,cpuLimit:"1000m",duration:90,memoryLimit:"2000Mi",rps:100}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:404.40449438202245,totalRequests:35992,latency:{max:109.498367,min:.38012799999999997,mean:.515294,pstdev:.980444,percentiles:{p50:.464495,p75:.48273499999999997,p80:.487215,p90:.503199,p95:.534847,p99:1.253183,p999:10.898431}},resources:{envoyGateway:{memory:{max:131.48046875,min:109.91796875,mean:125.279296875},cpu:{max:.9333333333333335,min:.3333333333333336,mean:.5111111111111112}},envoyProxy:{memory:{max:21.76171875,min:7.1015625,mean:18.87365301724138},cpu:{max:10.554019329822324,min:7.540699450203251,mean:10.166335275663474}}},poolOverflow:8,upstreamConnections:12,counters:{"benchmark.http_2xx":{value:35992,perSecond:404.40449438202245},"benchmark.pool_overflow":{value:8,perSecond:.0898876404494382},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:12,perSecond:.1348314606741573},upstream_cx_rx_bytes_total:{value:5650744,perSecond:63491.50561797753},upstream_cx_total:{value:12,perSecond:.1348314606741573},upstream_cx_tx_bytes_total:{value:1619640,perSecond:18198.20224719101},upstream_rq_pending_overflow:{value:8,perSecond:.0898876404494382},upstream_rq_pending_total:{value:12,perSecond:.1348314606741573},upstream_rq_total:{value:35992,perSecond:404.40449438202245}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1212.9550561797753,totalRequests:107953,latency:{max:83.43961499999999,min:.33288,mean:.49536899999999995,pstdev:.762126,percentiles:{p50:.44383900000000004,p75:.462367,p80:.466623,p90:.485423,p95:.5404150000000001,p99:1.544191,p999:9.935359}},resources:{envoyGateway:{memory:{max:133.84765625,min:127.07421875,mean:131.03697916666667},cpu:{max:.5999999999999991,min:.40000000000000036,mean:.5111111111111107}},envoyProxy:{memory:{max:25.69921875,min:21.16015625,mean:25.233854166666667},cpu:{max:29.37750977835723,min:29.288211204542968,mean:29.352440857053452}}},poolOverflow:47,upstreamConnections:36,counters:{"benchmark.http_2xx":{value:107953,perSecond:1212.9550561797753},"benchmark.pool_overflow":{value:47,perSecond:.5280898876404494},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:36,perSecond:.4044943820224719},upstream_cx_rx_bytes_total:{value:16948621,perSecond:190433.94382022473},upstream_cx_total:{value:36,perSecond:.4044943820224719},upstream_cx_tx_bytes_total:{value:4857885,perSecond:54582.97752808989},upstream_rq_pending_overflow:{value:47,perSecond:.5280898876404494},upstream_rq_pending_total:{value:36,perSecond:.4044943820224719},upstream_rq_total:{value:107953,perSecond:1212.9550561797753}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:2021.4943820224719,totalRequests:179913,latency:{max:45.336574999999996,min:.276032,mean:.5828209999999999,pstdev:.817276,percentiles:{p50:.487327,p75:.549631,p80:.5931190000000001,p90:.738015,p95:.8929269999999999,p99:2.2096630000000004,p999:10.760703}},resources:{envoyGateway:{memory:{max:139.8203125,min:130.8671875,mean:134.37369791666666},cpu:{max:1.7333333333333318,min:.5333333333333339,mean:.8266666666666667}},envoyProxy:{memory:{max:30.21875,min:25.56640625,mean:29.29453125},cpu:{max:43.00184937340304,min:42.62349434320169,mean:42.807061855525625}}},poolOverflow:85,upstreamConnections:76,counters:{"benchmark.http_2xx":{value:179913,perSecond:2021.4943820224719},"benchmark.pool_overflow":{value:85,perSecond:.9550561797752809},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:76,perSecond:.8539325842696629},upstream_cx_rx_bytes_total:{value:28246341,perSecond:317374.6179775281},upstream_cx_total:{value:76,perSecond:.8539325842696629},upstream_cx_tx_bytes_total:{value:8096130,perSecond:90967.75280898876},upstream_rq_pending_overflow:{value:85,perSecond:.9550561797752809},upstream_rq_pending_total:{value:76,perSecond:.8539325842696629},upstream_rq_total:{value:179914,perSecond:2021.5056179775281}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3199.2,totalRequests:287928,latency:{max:40.372223,min:.2696,mean:.760329,pstdev:.8954399999999999,percentiles:{p50:.578367,p75:.648383,p80:.689471,p90:1.035039,p95:1.6718709999999999,p99:3.783935,p999:13.377535}},resources:{envoyGateway:{memory:{max:153.76171875,min:144.046875,mean:150.990234375},cpu:{max:32.06666666666667,min:.6666666666666643,mean:5.988888893629631}},envoyProxy:{memory:{max:46.6875,min:33.8515625,mean:43.86145833333333},cpu:{max:65.97595594217421,min:65.81858578052547,mean:65.89727086134984}}},poolOverflow:72,upstreamConnections:87,counters:{"benchmark.http_2xx":{value:287928,perSecond:3199.2},"benchmark.pool_overflow":{value:72,perSecond:.8},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:87,perSecond:.9666666666666667},upstream_cx_rx_bytes_total:{value:45204696,perSecond:502274.4},upstream_cx_total:{value:87,perSecond:.9666666666666667},upstream_cx_tx_bytes_total:{value:12956760,perSecond:143964},upstream_rq_pending_overflow:{value:72,perSecond:.8},upstream_rq_pending_total:{value:87,perSecond:.9666666666666667},upstream_rq_total:{value:287928,perSecond:3199.2}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:4043.4606741573034,totalRequests:359868,latency:{max:107.41350299999999,min:.253432,mean:1.37783,pstdev:4.171488999999999,percentiles:{p50:.690591,p75:.9181429999999999,p80:1.038527,p90:2.045887,p95:3.422079,p99:12.497919,p999:66.467839}},resources:{envoyGateway:{memory:{max:161.8359375,min:146.98046875,mean:160.31276041666666},cpu:{max:49.13333333333334,min:.86666666666666,mean:9.222988505747129}},envoyProxy:{memory:{max:70.37890625,min:48.23046875,mean:62.147526041666666},cpu:{max:76.39781104541453,min:75.68597611597177,mean:75.94452978166471}}},poolOverflow:119,upstreamConnections:281,counters:{"benchmark.http_2xx":{value:359868,perSecond:4043.4606741573034},"benchmark.pool_overflow":{value:119,perSecond:1.3370786516853932},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:281,perSecond:3.157303370786517},upstream_cx_rx_bytes_total:{value:56499276,perSecond:634823.3258426966},upstream_cx_total:{value:281,perSecond:3.157303370786517},upstream_cx_tx_bytes_total:{value:16194600,perSecond:181961.79775280898},upstream_rq_pending_overflow:{value:119,perSecond:1.3370786516853932},upstream_rq_pending_total:{value:281,perSecond:3.157303370786517},upstream_rq_total:{value:359880,perSecond:4043.5955056179773}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:6508.044444444445,totalRequests:585724,latency:{max:705.036287,min:1.559616,mean:45.79942,pstdev:13.919675,percentiles:{p50:44.763135000000005,p75:52.000767,p80:53.450751,p90:57.329663000000004,p95:61.442047,p99:87.625727,p999:156.680191}},resources:{envoyGateway:{memory:{max:189.63671875,min:175.828125,mean:182.88255208333334},cpu:{max:96.26666666666665,min:.8666666666666363,mean:15.506662238222047}},envoyProxy:{memory:{max:105.33203125,min:89.0859375,mean:100.22604166666666},cpu:{max:98.10031793745301,min:98.100317937453,mean:98.100317937453}}},poolOverflow:99,upstreamConnections:301,counters:{"benchmark.http_2xx":{value:585724,perSecond:6508.044444444445},"benchmark.pool_overflow":{value:99,perSecond:1.1},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:301,perSecond:3.3444444444444446},upstream_cx_rx_bytes_total:{value:91958668,perSecond:1.0217629777777778e6},upstream_cx_total:{value:301,perSecond:3.3444444444444446},upstream_cx_tx_bytes_total:{value:26370360,perSecond:293004},upstream_rq_pending_overflow:{value:99,perSecond:1.1},upstream_rq_pending_total:{value:301,perSecond:3.3444444444444446},upstream_rq_total:{value:586008,perSecond:6511.2}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3999.0555555555557,totalRequests:359915,latency:{max:141.844479,min:.262272,mean:1.5387339999999998,pstdev:4.385846,percentiles:{p50:.648831,p75:.982335,p80:1.1812470000000002,p90:2.536063,p95:4.634111,p99:18.376703000000003,p999:65.419263}},resources:{envoyGateway:{memory:{max:185.24609375,min:163.96875,mean:170.17838541666666},cpu:{max:1.3333333333333524,min:1.0000000000000377,mean:1.1199573418649655}},envoyProxy:{memory:{max:104.74609375,min:103.33203125,mean:104.26653645833333},cpu:{max:78.74553133975333,min:54.886713963210774,mean:66.81612265148205}}},poolOverflow:81,upstreamConnections:296,counters:{"benchmark.http_2xx":{value:359915,perSecond:3999.0555555555557},"benchmark.pool_overflow":{value:81,perSecond:.9},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:296,perSecond:3.2888888888888888},upstream_cx_rx_bytes_total:{value:56506655,perSecond:627851.7222222222},upstream_cx_total:{value:296,perSecond:3.2888888888888888},upstream_cx_tx_bytes_total:{value:16196355,perSecond:179959.5},upstream_rq_pending_overflow:{value:81,perSecond:.9},upstream_rq_pending_total:{value:296,perSecond:3.2888888888888888},upstream_rq_total:{value:359919,perSecond:3999.1}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3199.4555555555557,totalRequests:287951,latency:{max:55.562239,min:.27488,mean:1.172193,pstdev:1.6265640000000001,percentiles:{p50:.603935,p75:1.207871,p80:1.733567,p90:2.645375,p95:3.0668789999999997,p99:6.285823000000001,p999:20.894719}},resources:{envoyGateway:{memory:{max:160.8046875,min:149.265625,mean:154.90598958333334},cpu:{max:1.266244585138272,min:.9336445481827313,mean:1.096944499997193}},envoyProxy:{memory:{max:104.10546875,min:103.3125,mean:103.80494791666666},cpu:{max:66.13249527856466,min:64.65317981276254,mean:65.46358015461453}}},poolOverflow:48,upstreamConnections:123,counters:{"benchmark.http_2xx":{value:287951,perSecond:3199.4555555555557},"benchmark.pool_overflow":{value:48,perSecond:.5333333333333333},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:123,perSecond:1.3666666666666667},upstream_cx_rx_bytes_total:{value:45208307,perSecond:502314.52222222224},upstream_cx_total:{value:123,perSecond:1.3666666666666667},upstream_cx_tx_bytes_total:{value:12957840,perSecond:143976},upstream_rq_pending_overflow:{value:48,perSecond:.5333333333333333},upstream_rq_pending_total:{value:123,perSecond:1.3666666666666667},upstream_rq_total:{value:287952,perSecond:3199.4666666666667}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:2021.2808988764045,totalRequests:179894,latency:{max:63.080447,min:.27105599999999996,mean:.6560739999999999,pstdev:1.06362,percentiles:{p50:.548959,p75:.6565749999999999,p80:.690783,p90:.823327,p95:.9779190000000001,p99:2.508799,p999:17.105919}},resources:{envoyGateway:{memory:{max:162.5546875,min:146.77734375,mean:151.49283854166666},cpu:{max:1.066666666666644,min:.933333333333337,mean:1.0166666666666657}},envoyProxy:{memory:{max:103.87109375,min:103.01953125,mean:103.50442708333334},cpu:{max:41.79160047230567,min:21.789793713683935,mean:31.509512905644222}}},poolOverflow:104,upstreamConnections:66,counters:{"benchmark.http_2xx":{value:179894,perSecond:2021.2808988764045},"benchmark.pool_overflow":{value:104,perSecond:1.1685393258426966},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:66,perSecond:.7415730337078652},upstream_cx_rx_bytes_total:{value:28243358,perSecond:317341.1011235955},upstream_cx_total:{value:66,perSecond:.7415730337078652},upstream_cx_tx_bytes_total:{value:8095230,perSecond:90957.6404494382},upstream_rq_pending_overflow:{value:104,perSecond:1.1685393258426966},upstream_rq_pending_total:{value:66,perSecond:.7415730337078652},upstream_rq_total:{value:179894,perSecond:2021.2808988764045}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1198.9222222222222,totalRequests:107903,latency:{max:97.869823,min:.34808,mean:.5089359999999999,pstdev:1.073334,percentiles:{p50:.442463,p75:.462575,p80:.467695,p90:.486479,p95:.5455990000000001,p99:1.8232949999999999,p999:10.969599}},resources:{envoyGateway:{memory:{max:150.85546875,min:142.01953125,mean:144.434375},cpu:{max:1.1999999999999507,min:.933333333333337,mean:1.0606060606060561}},envoyProxy:{memory:{max:103.63671875,min:103.2734375,mean:103.49453125},cpu:{max:29.558607972838676,min:19.90093760440843,mean:27.73225719409582}}},poolOverflow:97,upstreamConnections:42,counters:{"benchmark.http_2xx":{value:107903,perSecond:1198.9222222222222},"benchmark.pool_overflow":{value:97,perSecond:1.0777777777777777},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:42,perSecond:.4666666666666667},upstream_cx_rx_bytes_total:{value:16940771,perSecond:188230.7888888889},upstream_cx_total:{value:42,perSecond:.4666666666666667},upstream_cx_tx_bytes_total:{value:4855635,perSecond:53951.5},upstream_rq_pending_overflow:{value:97,perSecond:1.0777777777777777},upstream_rq_pending_total:{value:42,perSecond:.4666666666666667},upstream_rq_total:{value:107903,perSecond:1198.9222222222222}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:404.39325842696627,totalRequests:35991,latency:{max:27.911167,min:.371904,mean:.497451,pstdev:.427144,percentiles:{p50:.466335,p75:.482623,p80:.486383,p90:.49972700000000003,p95:.530815,p99:1.201855,p999:5.028607}},resources:{envoyGateway:{memory:{max:145.3046875,min:141.98046875,mean:143.59661458333332},cpu:{max:1.1999999999999507,min:.933333333333337,mean:1.03055555555555}},envoyProxy:{memory:{max:103.58203125,min:103.0703125,mean:103.26497395833333},cpu:{max:10.618555732253945,min:5.543974256020859,mean:9.807505359943042}}},poolOverflow:9,upstreamConnections:13,counters:{"benchmark.http_2xx":{value:35991,perSecond:404.39325842696627},"benchmark.pool_overflow":{value:9,perSecond:.10112359550561797},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:13,perSecond:.14606741573033707},upstream_cx_rx_bytes_total:{value:5650587,perSecond:63489.74157303371},upstream_cx_total:{value:13,perSecond:.14606741573033707},upstream_cx_tx_bytes_total:{value:1619595,perSecond:18197.696629213482},upstream_rq_pending_overflow:{value:9,perSecond:.10112359550561797},upstream_rq_pending_total:{value:13,perSecond:.14606741573033707},upstream_rq_total:{value:35991,perSecond:404.39325842696627}}}]},Ose={metadata:{version:"1.7.4",runId:"1.7.4-release-2026-06-05",date:"2026-06-05T07:55:33Z",environment:"GitHub Release",description:"Benchmark results for version 1.7.4 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.7.4/benchmark_report.zip",testConfiguration:{connections:100,cpuLimit:"1000m",duration:90,memoryLimit:"2000Mi",rps:100}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:399.9888888888889,totalRequests:35999,latency:{max:33.251326999999996,min:.308688,mean:.426933,pstdev:.39075,percentiles:{p50:.399887,p75:.423567,p80:.43081499999999995,p90:.453743,p95:.482719,p99:.888159,p999:4.870911}},resources:{envoyGateway:{memory:{max:137.75,min:119.390625,mean:135.84114583333334},cpu:{max:1.2000000000000004,min:.26666666666666694,mean:.523809523809524}},envoyProxy:{memory:{max:24.57421875,min:6.71484375,mean:22.530598958333332},cpu:{max:9.426398721169218,min:5.449132527399091,mean:8.087672764585205}}},poolOverflow:1,upstreamConnections:9,counters:{"benchmark.http_2xx":{value:35999,perSecond:399.9888888888889},"benchmark.pool_overflow":{value:1,perSecond:.011111111111111112},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:9,perSecond:.1},upstream_cx_rx_bytes_total:{value:5651843,perSecond:62798.25555555556},upstream_cx_total:{value:9,perSecond:.1},upstream_cx_tx_bytes_total:{value:1619955,perSecond:17999.5},upstream_rq_pending_overflow:{value:1,perSecond:.011111111111111112},upstream_rq_pending_total:{value:9,perSecond:.1},upstream_rq_total:{value:35999,perSecond:399.9888888888889}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1213,totalRequests:107957,latency:{max:83.54201499999999,min:.27854399999999996,mean:.416908,pstdev:.76607,percentiles:{p50:.386223,p75:.40463899999999997,p80:.410015,p90:.427055,p95:.457007,p99:1.030719,p999:4.182271}},resources:{envoyGateway:{memory:{max:143.77734375,min:138.45703125,mean:140.41380208333334},cpu:{max:1.866666666666667,min:.40000000000000036,mean:.7466666666666664}},envoyProxy:{memory:{max:30.94140625,min:28.3046875,mean:30.134635416666665},cpu:{max:25.687688289072725,min:15.110782636047029,mean:23.981684291342074}}},poolOverflow:43,upstreamConnections:29,counters:{"benchmark.http_2xx":{value:107957,perSecond:1213},"benchmark.pool_overflow":{value:43,perSecond:.48314606741573035},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:29,perSecond:.3258426966292135},upstream_cx_rx_bytes_total:{value:16949249,perSecond:190441},upstream_cx_total:{value:29,perSecond:.3258426966292135},upstream_cx_tx_bytes_total:{value:4858065,perSecond:54585},upstream_rq_pending_overflow:{value:43,perSecond:.48314606741573035},upstream_rq_pending_total:{value:29,perSecond:.3258426966292135},upstream_rq_total:{value:107957,perSecond:1213}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:2021.9325842696628,totalRequests:179952,latency:{max:39.815166999999995,min:.25008,mean:.393862,pstdev:.291014,percentiles:{p50:.359743,p75:.403711,p80:.416543,p90:.460687,p95:.544991,p99:.997439,p999:3.0465269999999998}},resources:{envoyGateway:{memory:{max:146.54296875,min:138.87109375,mean:144.67838541666666},cpu:{max:2.2666666666666657,min:.4666666666666685,mean:.8977777777777782}},envoyProxy:{memory:{max:36.9375,min:36.58203125,mean:36.77981770833333},cpu:{max:36.94134174742694,min:26.86066527358325,mean:35.05044941527442}}},poolOverflow:48,upstreamConnections:27,counters:{"benchmark.http_2xx":{value:179952,perSecond:2021.9325842696628},"benchmark.pool_overflow":{value:48,perSecond:.5393258426966292},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:27,perSecond:.30337078651685395},upstream_cx_rx_bytes_total:{value:28252464,perSecond:317443.4157303371},upstream_cx_total:{value:27,perSecond:.30337078651685395},upstream_cx_tx_bytes_total:{value:8097840,perSecond:90986.96629213484},upstream_rq_pending_overflow:{value:48,perSecond:.5393258426966292},upstream_rq_pending_total:{value:27,perSecond:.30337078651685395},upstream_rq_total:{value:179952,perSecond:2021.9325842696628}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3199.588888888889,totalRequests:287963,latency:{max:74.407935,min:.2362,mean:.636105,pstdev:2.963721,percentiles:{p50:.33427100000000004,p75:.424143,p80:.44676699999999997,p90:.550239,p95:.731583,p99:3.988735,p999:51.693567}},resources:{envoyGateway:{memory:{max:152.87109375,min:146.68359375,mean:150.56302083333333},cpu:{max:4.800000000000004,min:.5333333333333339,mean:1.4555555555555566}},envoyProxy:{memory:{max:68.76953125,min:56.9609375,mean:63.75859375},cpu:{max:58.60384001418934,min:34.71300790173815,mean:53.306176495585646}}},poolOverflow:37,upstreamConnections:226,counters:{"benchmark.http_2xx":{value:287963,perSecond:3199.588888888889},"benchmark.pool_overflow":{value:37,perSecond:.4111111111111111},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:226,perSecond:2.511111111111111},upstream_cx_rx_bytes_total:{value:45210191,perSecond:502335.4555555555},upstream_cx_total:{value:226,perSecond:2.511111111111111},upstream_cx_tx_bytes_total:{value:12958335,perSecond:143981.5},upstream_rq_pending_overflow:{value:37,perSecond:.4111111111111111},upstream_rq_pending_total:{value:226,perSecond:2.511111111111111},upstream_rq_total:{value:287963,perSecond:3199.588888888889}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3999.266666666667,totalRequests:359934,latency:{max:191.356927,min:.21468,mean:1.664008,pstdev:8.160039,percentiles:{p50:.45743900000000004,p75:.523199,p80:.564031,p90:.905023,p95:1.908159,p99:47.011839,p999:96.559103}},resources:{envoyGateway:{memory:{max:174.10546875,min:161.8203125,mean:169.17161458333334},cpu:{max:7.266666666666666,min:.6666666666666762,mean:1.8755555555555554}},envoyProxy:{memory:{max:93.60546875,min:83.7734375,mean:90.74986979166667},cpu:{max:66.83496625843536,min:34.83865624987582,mean:54.83174977413697}}},poolOverflow:66,upstreamConnections:334,counters:{"benchmark.http_2xx":{value:359934,perSecond:3999.266666666667},"benchmark.pool_overflow":{value:66,perSecond:.7333333333333333},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:334,perSecond:3.7111111111111112},upstream_cx_rx_bytes_total:{value:56509638,perSecond:627884.8666666667},upstream_cx_total:{value:334,perSecond:3.7111111111111112},upstream_cx_tx_bytes_total:{value:16197030,perSecond:179967},upstream_rq_pending_overflow:{value:66,perSecond:.7333333333333333},upstream_rq_pending_total:{value:334,perSecond:3.7111111111111112},upstream_rq_total:{value:359934,perSecond:3999.266666666667}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:7976.5,totalRequests:717885,latency:{max:233.98809500000002,min:.229776,mean:14.102452999999999,pstdev:15.460493000000001,percentiles:{p50:3.779839,p75:25.521151,p80:27.223039,p90:31.238143,p95:35.014655,p99:77.422591,p999:90.357759}},resources:{envoyGateway:{memory:{max:192.08984375,min:174.54296875,mean:186.37473958333334},cpu:{max:13.133333333333324,min:.8000000000000304,mean:2.880000000000004}},envoyProxy:{memory:{max:143.33984375,min:138.078125,mean:141.55286458333333},cpu:{max:98.90207227264949,min:62.16400644335651,mean:90.35971139102087}}},poolOverflow:150,upstreamConnections:250,counters:{"benchmark.http_2xx":{value:717885,perSecond:7976.5},"benchmark.pool_overflow":{value:150,perSecond:1.6666666666666667},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:250,perSecond:2.7777777777777777},upstream_cx_rx_bytes_total:{value:112707945,perSecond:12523105e-1},upstream_cx_total:{value:250,perSecond:2.7777777777777777},upstream_cx_tx_bytes_total:{value:32315175,perSecond:359057.5},upstream_rq_pending_overflow:{value:150,perSecond:1.6666666666666667},upstream_rq_pending_total:{value:250,perSecond:2.7777777777777777},upstream_rq_total:{value:718115,perSecond:7979.055555555556}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3999.488888888889,totalRequests:359954,latency:{max:233.693183,min:.231872,mean:1.694018,pstdev:8.011149,percentiles:{p50:.461503,p75:.522703,p80:.558111,p90:.840639,p95:1.9069429999999998,p99:48.564223,p999:89.624575}},resources:{envoyGateway:{memory:{max:173.07421875,min:167.5703125,mean:171.127734375},cpu:{max:1.1333333333333446,min:.9999999999999432,mean:1.0515151515151429}},envoyProxy:{memory:{max:143.82421875,min:142.14453125,mean:143.23541666666668},cpu:{max:67.09508363517963,min:67.09508363517963,mean:67.09508363517963}}},poolOverflow:46,upstreamConnections:354,counters:{"benchmark.http_2xx":{value:359954,perSecond:3999.488888888889},"benchmark.pool_overflow":{value:46,perSecond:.5111111111111111},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:354,perSecond:3.933333333333333},upstream_cx_rx_bytes_total:{value:56512778,perSecond:627919.7555555556},upstream_cx_total:{value:354,perSecond:3.933333333333333},upstream_cx_tx_bytes_total:{value:16197930,perSecond:179977},upstream_rq_pending_overflow:{value:46,perSecond:.5111111111111111},upstream_rq_pending_total:{value:354,perSecond:3.933333333333333},upstream_rq_total:{value:359954,perSecond:3999.488888888889}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3199.5,totalRequests:287955,latency:{max:122.720255,min:.235768,mean:.640906,pstdev:3.1200669999999997,percentiles:{p50:.32247899999999996,p75:.366303,p80:.417903,p90:.529279,p95:.753823,p99:5.074687,p999:50.528255}},resources:{envoyGateway:{memory:{max:178.47265625,min:161.37890625,mean:164.63216145833334},cpu:{max:2.6000000000000036,min:.9999999999999432,mean:1.333333333333333}},envoyProxy:{memory:{max:143.71484375,min:133.97265625,mean:136.52604166666666},cpu:{max:56.556327110947876,min:34.234786377497414,mean:51.36810909110853}}},poolOverflow:41,upstreamConnections:197,counters:{"benchmark.http_2xx":{value:287955,perSecond:3199.5},"benchmark.pool_overflow":{value:41,perSecond:.45555555555555555},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:197,perSecond:2.188888888888889},upstream_cx_rx_bytes_total:{value:45208935,perSecond:502321.5},upstream_cx_total:{value:197,perSecond:2.188888888888889},upstream_cx_tx_bytes_total:{value:12958155,perSecond:143979.5},upstream_rq_pending_overflow:{value:41,perSecond:.45555555555555555},upstream_rq_pending_total:{value:197,perSecond:2.188888888888889},upstream_rq_total:{value:287959,perSecond:3199.5444444444443}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:1999.4,totalRequests:179946,latency:{max:40.019966999999994,min:.255168,mean:.386061,pstdev:.370692,percentiles:{p50:.361807,p75:.379759,p80:.384175,p90:.398287,p95:.428847,p99:1.0680310000000002,p999:4.079359}},resources:{envoyGateway:{memory:{max:158.55078125,min:151.36328125,mean:153.33072916666666},cpu:{max:1.1333333333333446,min:.933333333333337,mean:.9848484848484845}},envoyProxy:{memory:{max:134.265625,min:133.7421875,mean:133.99661458333333},cpu:{max:39.644203192640646,min:22.70835085046973,mean:36.96250951395476}}},poolOverflow:54,upstreamConnections:36,counters:{"benchmark.http_2xx":{value:179946,perSecond:1999.4},"benchmark.pool_overflow":{value:54,perSecond:.6},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:36,perSecond:.4},upstream_cx_rx_bytes_total:{value:28251522,perSecond:313905.8},upstream_cx_total:{value:36,perSecond:.4},upstream_cx_tx_bytes_total:{value:8097570,perSecond:89973},upstream_rq_pending_overflow:{value:54,perSecond:.6},upstream_rq_pending_total:{value:36,perSecond:.4},upstream_rq_total:{value:179946,perSecond:1999.4}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1212.7640449438202,totalRequests:107936,latency:{max:56.717311,min:.26424000000000003,mean:.40393999999999997,pstdev:.624905,percentiles:{p50:.375199,p75:.391215,p80:.395695,p90:.411343,p95:.434719,p99:1.033279,p999:4.856318999999999}},resources:{envoyGateway:{memory:{max:153.9609375,min:148.01171875,mean:149.52682291666667},cpu:{max:1.1999999999999509,min:.8666666666666363,mean:.9888888888888814}},envoyProxy:{memory:{max:134.21875,min:133.6484375,mean:133.89127604166666},cpu:{max:0,min:0,mean:0}}},poolOverflow:64,upstreamConnections:29,counters:{"benchmark.http_2xx":{value:107936,perSecond:1212.7640449438202},"benchmark.pool_overflow":{value:64,perSecond:.7191011235955056},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:29,perSecond:.3258426966292135},upstream_cx_rx_bytes_total:{value:16945952,perSecond:190403.95505617978},upstream_cx_total:{value:29,perSecond:.3258426966292135},upstream_cx_tx_bytes_total:{value:4857120,perSecond:54574.38202247191},upstream_rq_pending_overflow:{value:64,perSecond:.7191011235955056},upstream_rq_pending_total:{value:29,perSecond:.3258426966292135},upstream_rq_total:{value:107936,perSecond:1212.7640449438202}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:404.438202247191,totalRequests:35995,latency:{max:48.982015,min:.316272,mean:.47786,pstdev:.880794,percentiles:{p50:.428367,p75:.45654300000000003,p80:.47054300000000004,p90:.496687,p95:.526687,p99:1.1299190000000001,p999:8.804863}},resources:{envoyGateway:{memory:{max:148.640625,min:143.78125,mean:145.92122395833334},cpu:{max:1.1333333333333446,min:.933333333333337,mean:1.0222222222222215}},envoyProxy:{memory:{max:134.15234375,min:133.6875,mean:133.94466145833334},cpu:{max:9.708975160130983,min:6.287532313700823,mean:8.870891522527844}}},poolOverflow:5,upstreamConnections:16,counters:{"benchmark.http_2xx":{value:35995,perSecond:404.438202247191},"benchmark.pool_overflow":{value:5,perSecond:.056179775280898875},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:16,perSecond:.1797752808988764},upstream_cx_rx_bytes_total:{value:5651215,perSecond:63496.79775280899},upstream_cx_total:{value:16,perSecond:.1797752808988764},upstream_cx_tx_bytes_total:{value:1619775,perSecond:18199.719101123595},upstream_rq_pending_overflow:{value:5,perSecond:.056179775280898875},upstream_rq_pending_total:{value:16,perSecond:.1797752808988764},upstream_rq_total:{value:35995,perSecond:404.438202247191}}}]},kse={metadata:{version:"1.8.2",runId:"1.8.2-release-2026-07-01",date:"2026-07-01T07:14:42Z",environment:"GitHub Release",description:"Benchmark results for version 1.8.2 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.8.2/benchmark_report.zip",testConfiguration:{connections:100,cpuLimit:"1000m",duration:90,memoryLimit:"2000Mi",rps:100}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:404.4269662921348,totalRequests:35994,latency:{max:36.020222999999994,min:.312,mean:.41179699999999997,pstdev:.449004,percentiles:{p50:.380687,p75:.39697499999999997,p80:.40220700000000004,p90:.422943,p95:.457727,p99:.942815,p999:5.765119}},resources:{envoyGateway:{memory:{max:132.5859375,min:106.25390625,mean:125.273828125},cpu:{max:.8,min:.26666666666666655,mean:.4357142857142859}},envoyProxy:{memory:{max:20.3125,min:7.51171875,mean:17.907462284482758},cpu:{max:8.761964562188197,min:5.422322740352064,mean:7.468832454853503}}},poolOverflow:6,upstreamConnections:11,counters:{"benchmark.http_2xx":{value:35994,perSecond:404.4269662921348},"benchmark.pool_overflow":{value:6,perSecond:.06741573033707865},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:11,perSecond:.12359550561797752},upstream_cx_rx_bytes_total:{value:5651058,perSecond:63495.03370786517},upstream_cx_total:{value:11,perSecond:.12359550561797752},upstream_cx_tx_bytes_total:{value:1619730,perSecond:18199.213483146068},upstream_rq_pending_overflow:{value:6,perSecond:.06741573033707865},upstream_rq_pending_total:{value:11,perSecond:.12359550561797752},upstream_rq_total:{value:35994,perSecond:404.4269662921348}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1199.4333333333334,totalRequests:107949,latency:{max:64.907263,min:.27233599999999997,mean:.38906599999999997,pstdev:.7291580000000001,percentiles:{p50:.351375,p75:.366735,p80:.371327,p90:.38687900000000003,p95:.417103,p99:1.061375,p999:6.537727}},resources:{envoyGateway:{memory:{max:136.16796875,min:129.78125,mean:133.76419270833333},cpu:{max:.46666666666666706,min:.40000000000000036,mean:.4515151515151514}},envoyProxy:{memory:{max:24.875,min:20.3046875,mean:24.182291666666668},cpu:{max:23.617121248692584,min:15.34443729396305,mean:21.76731003192191}}},poolOverflow:51,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:107949,perSecond:1199.4333333333334},"benchmark.pool_overflow":{value:51,perSecond:.5666666666666667},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:37,perSecond:.4111111111111111},upstream_cx_rx_bytes_total:{value:16947993,perSecond:188311.03333333333},upstream_cx_total:{value:37,perSecond:.4111111111111111},upstream_cx_tx_bytes_total:{value:4857705,perSecond:53974.5},upstream_rq_pending_overflow:{value:51,perSecond:.5666666666666667},upstream_rq_pending_total:{value:37,perSecond:.4111111111111111},upstream_rq_total:{value:107949,perSecond:1199.4333333333334}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:2021.5168539325844,totalRequests:179915,latency:{max:127.25452700000001,min:.263232,mean:.378263,pstdev:1.1435600000000001,percentiles:{p50:.332655,p75:.354879,p80:.360607,p90:.377151,p95:.422591,p99:1.157119,p999:4.588799}},resources:{envoyGateway:{memory:{max:137.95703125,min:128.9453125,mean:134.10416666666666},cpu:{max:4.800000000000002,min:.3999999999999974,mean:1.335897435897436}},envoyProxy:{memory:{max:28.83984375,min:24.78515625,mean:27.861458333333335},cpu:{max:36.54449081803006,min:35.403415543690116,mean:36.08806070829409}}},poolOverflow:85,upstreamConnections:42,counters:{"benchmark.http_2xx":{value:179915,perSecond:2021.5168539325844},"benchmark.pool_overflow":{value:85,perSecond:.9550561797752809},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:42,perSecond:.47191011235955055},upstream_cx_rx_bytes_total:{value:28246655,perSecond:317378.1460674157},upstream_cx_total:{value:42,perSecond:.47191011235955055},upstream_cx_tx_bytes_total:{value:8096175,perSecond:90968.25842696629},upstream_rq_pending_overflow:{value:85,perSecond:.9550561797752809},upstream_rq_pending_total:{value:42,perSecond:.47191011235955055},upstream_rq_total:{value:179915,perSecond:2021.5168539325844}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3199.233333333333,totalRequests:287931,latency:{max:44.654591,min:.227192,mean:.416971,pstdev:.692846,percentiles:{p50:.325727,p75:.35556699999999997,p80:.37772700000000003,p90:.482255,p95:.652991,p99:2.004095,p999:9.937918999999999}},resources:{envoyGateway:{memory:{max:152.89453125,min:142.5703125,mean:148.78268229166667},cpu:{max:23.06666666666667,min:.5999999999999991,mean:4.562222222222224}},envoyProxy:{memory:{max:45.5,min:28.19921875,mean:40.841796875},cpu:{max:56.956964607078575,min:55.81466109688724,mean:56.115334620281175}}},poolOverflow:69,upstreamConnections:91,counters:{"benchmark.http_2xx":{value:287931,perSecond:3199.233333333333},"benchmark.pool_overflow":{value:69,perSecond:.7666666666666667},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:91,perSecond:1.011111111111111},upstream_cx_rx_bytes_total:{value:45205167,perSecond:502279.63333333336},upstream_cx_total:{value:91,perSecond:1.011111111111111},upstream_cx_tx_bytes_total:{value:12956895,perSecond:143965.5},upstream_rq_pending_overflow:{value:69,perSecond:.7666666666666667},upstream_rq_pending_total:{value:91,perSecond:1.011111111111111},upstream_rq_total:{value:287931,perSecond:3199.233333333333}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3998.511111111111,totalRequests:359866,latency:{max:107.909119,min:.213488,mean:.846032,pstdev:3.164183,percentiles:{p50:.46446299999999996,p75:.518143,p80:.548575,p90:.7605430000000001,p95:1.322303,p99:9.396735,p999:49.727487}},resources:{envoyGateway:{memory:{max:169,min:151.01953125,mean:165.20091145833334},cpu:{max:32.93333333333333,min:.5999999999999991,mean:6.317777777777774}},envoyProxy:{memory:{max:64.9921875,min:44.9375,mean:58.34322916666667},cpu:{max:67.03195836840888,min:46.42560149423007,mean:63.367608419813365}}},poolOverflow:134,upstreamConnections:253,counters:{"benchmark.http_2xx":{value:359866,perSecond:3998.511111111111},"benchmark.pool_overflow":{value:134,perSecond:1.488888888888889},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:253,perSecond:2.811111111111111},upstream_cx_rx_bytes_total:{value:56498962,perSecond:627766.2444444444},upstream_cx_total:{value:253,perSecond:2.811111111111111},upstream_cx_tx_bytes_total:{value:16193970,perSecond:179933},upstream_rq_pending_overflow:{value:134,perSecond:1.488888888888889},upstream_rq_pending_total:{value:253,perSecond:2.811111111111111},upstream_rq_total:{value:359866,perSecond:3998.511111111111}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:7443.9111111111115,totalRequests:669952,latency:{max:584.450047,min:.286336,mean:42.145749,pstdev:11.921429000000002,percentiles:{p50:41.594879,p75:48.228351,p80:50.016255,p90:54.749183,p95:59.179007,p99:74.428415,p999:106.749951}},resources:{envoyGateway:{memory:{max:188.53125,min:166.06640625,mean:183.54153645833333},cpu:{max:67.19999999999999,min:.7333333333333295,mean:13.73333333333333}},envoyProxy:{memory:{max:102.2421875,min:91.796875,mean:98.63997395833333},cpu:{max:99.32751039159913,min:98.86982770503084,mean:99.02721402466419}}},poolOverflow:77,upstreamConnections:323,counters:{"benchmark.http_2xx":{value:669952,perSecond:7443.9111111111115},"benchmark.pool_overflow":{value:77,perSecond:.8555555555555555},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:323,perSecond:3.588888888888889},upstream_cx_rx_bytes_total:{value:105182464,perSecond:1.1686940444444444e6},upstream_cx_total:{value:323,perSecond:3.588888888888889},upstream_cx_tx_bytes_total:{value:30162375,perSecond:335137.5},upstream_rq_pending_overflow:{value:77,perSecond:.8555555555555555},upstream_rq_pending_total:{value:323,perSecond:3.588888888888889},upstream_rq_total:{value:670275,perSecond:7447.5}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3999.511111111111,totalRequests:359956,latency:{max:69.97196699999999,min:.222976,mean:.789628,pstdev:2.5729770000000003,percentiles:{p50:.466191,p75:.525215,p80:.568799,p90:.8516469999999999,p95:1.4764789999999999,p99:6.115327000000001,p999:45.881343}},resources:{envoyGateway:{memory:{max:169.31640625,min:165.83984375,mean:167.48033854166667},cpu:{max:.9333333333333372,min:.8666666666666363,mean:.904347826086966}},envoyProxy:{memory:{max:102.65625,min:100.359375,mean:101.98138020833333},cpu:{max:67.3141865613595,min:47.342977440931314,mean:65.13734998065154}}},poolOverflow:44,upstreamConnections:258,counters:{"benchmark.http_2xx":{value:359956,perSecond:3999.511111111111},"benchmark.pool_overflow":{value:44,perSecond:.4888888888888889},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:258,perSecond:2.8666666666666667},upstream_cx_rx_bytes_total:{value:56513092,perSecond:627923.2444444444},upstream_cx_total:{value:258,perSecond:2.8666666666666667},upstream_cx_tx_bytes_total:{value:16198020,perSecond:179978},upstream_rq_pending_overflow:{value:44,perSecond:.4888888888888889},upstream_rq_pending_total:{value:258,perSecond:2.8666666666666667},upstream_rq_total:{value:359956,perSecond:3999.511111111111}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3233.7303370786517,totalRequests:287802,latency:{max:67.01670299999999,min:.201728,mean:.495236,pstdev:.942877,percentiles:{p50:.378687,p75:.482031,p80:.506575,p90:.632319,p95:.808319,p99:2.2458869999999997,p999:12.598783000000001}},resources:{envoyGateway:{memory:{max:169.31640625,min:151.1328125,mean:157.56510416666666},cpu:{max:1.066666666666644,min:.8666666666666363,mean:.9333333333333373}},envoyProxy:{memory:{max:102.3828125,min:101.3515625,mean:101.960546875},cpu:{max:54.84321253527425,min:39.7540166597358,mean:53.0728229770368}}},poolOverflow:197,upstreamConnections:87,counters:{"benchmark.http_2xx":{value:287802,perSecond:3233.7303370786517},"benchmark.pool_overflow":{value:197,perSecond:2.2134831460674156},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:87,perSecond:.9775280898876404},upstream_cx_rx_bytes_total:{value:45184914,perSecond:507695.6629213483},upstream_cx_total:{value:87,perSecond:.9775280898876404},upstream_cx_tx_bytes_total:{value:12951090,perSecond:145517.8651685393},upstream_rq_pending_overflow:{value:197,perSecond:2.2134831460674156},upstream_rq_pending_total:{value:87,perSecond:.9775280898876404},upstream_rq_total:{value:287802,perSecond:3233.7303370786517}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:2021.0337078651685,totalRequests:179872,latency:{max:159.129599,min:.248888,mean:.388351,pstdev:1.219139,percentiles:{p50:.338255,p75:.358415,p80:.363711,p90:.382207,p95:.437503,p99:1.319487,p999:6.5948150000000005}},resources:{envoyGateway:{memory:{max:155.79296875,min:137.40234375,mean:145.04557291666666},cpu:{max:.933333333333337,min:.8000000000000304,mean:.8666666666666759}},envoyProxy:{memory:{max:101.8828125,min:101.41015625,mean:101.60481770833333},cpu:{max:22.885429953798287,min:22.885429953798287,mean:22.885429953798287}}},poolOverflow:128,upstreamConnections:42,counters:{"benchmark.http_2xx":{value:179872,perSecond:2021.0337078651685},"benchmark.pool_overflow":{value:128,perSecond:1.4382022471910112},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:42,perSecond:.47191011235955055},upstream_cx_rx_bytes_total:{value:28239904,perSecond:317302.2921348315},upstream_cx_total:{value:42,perSecond:.47191011235955055},upstream_cx_tx_bytes_total:{value:8094240,perSecond:90946.51685393258},upstream_rq_pending_overflow:{value:128,perSecond:1.4382022471910112},upstream_rq_pending_total:{value:42,perSecond:.47191011235955055},upstream_rq_total:{value:179872,perSecond:2021.0337078651685}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1213.3820224719102,totalRequests:107991,latency:{max:19.398655,min:.266,mean:.371821,pstdev:.225718,percentiles:{p50:.35195099999999996,p75:.366655,p80:.37027099999999996,p90:.382367,p95:.409743,p99:.9092790000000001,p999:3.3223670000000003}},resources:{envoyGateway:{memory:{max:150.1171875,min:142.828125,mean:145.550390625},cpu:{max:.8666666666666363,min:.7333333333333295,mean:.8285714285714285}},envoyProxy:{memory:{max:102.02734375,min:101.15625,mean:101.46640625},cpu:{max:23.23340219877513,min:23.14379762476824,mean:23.21548128397375}}},poolOverflow:9,upstreamConnections:21,counters:{"benchmark.http_2xx":{value:107991,perSecond:1213.3820224719102},"benchmark.pool_overflow":{value:9,perSecond:.10112359550561797},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:21,perSecond:.23595505617977527},upstream_cx_rx_bytes_total:{value:16954587,perSecond:190500.9775280899},upstream_cx_total:{value:21,perSecond:.23595505617977527},upstream_cx_tx_bytes_total:{value:4859595,perSecond:54602.191011235955},upstream_rq_pending_overflow:{value:9,perSecond:.10112359550561797},upstream_rq_pending_total:{value:21,perSecond:.23595505617977527},upstream_rq_total:{value:107991,perSecond:1213.3820224719102}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:399.97777777777776,totalRequests:35998,latency:{max:29.652991,min:.297424,mean:.40774499999999997,pstdev:.5738810000000001,percentiles:{p50:.371663,p75:.384431,p80:.388447,p90:.403167,p95:.435055,p99:.9181750000000001,p999:7.789054999999999}},resources:{envoyGateway:{memory:{max:147.078125,min:142.0546875,mean:143.29973958333332},cpu:{max:.933333333333337,min:.8000000000000304,mean:.8579710144927519}},envoyProxy:{memory:{max:101.5859375,min:101.1484375,mean:101.260546875},cpu:{max:8.503712683739975,min:5.653550666357093,mean:8.023664163938273}}},poolOverflow:2,upstreamConnections:11,counters:{"benchmark.http_2xx":{value:35998,perSecond:399.97777777777776},"benchmark.pool_overflow":{value:2,perSecond:.022222222222222223},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:11,perSecond:.12222222222222222},upstream_cx_rx_bytes_total:{value:5651686,perSecond:62796.51111111111},upstream_cx_total:{value:11,perSecond:.12222222222222222},upstream_cx_tx_bytes_total:{value:1619910,perSecond:17999},upstream_rq_pending_overflow:{value:2,perSecond:.022222222222222223},upstream_rq_pending_total:{value:11,perSecond:.12222222222222222},upstream_rq_total:{value:35998,perSecond:399.97777777777776}}}]},Cse={metadata:{version:"1.7.5",runId:"1.7.5-release-2026-07-08",date:"2026-07-08T15:36:49Z",environment:"GitHub Release",description:"Benchmark results for version 1.7.5 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.7.5/benchmark_report.zip",testConfiguration:{connections:100,cpuLimit:"1000m",duration:90,memoryLimit:"2000Mi",rps:100}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:404.46067415730334,totalRequests:35997,latency:{max:40.740863000000004,min:.378976,mean:.5088929999999999,pstdev:.7275590000000001,percentiles:{p50:.475471,p75:.49051100000000003,p80:.49487900000000007,p90:.510031,p95:.5354230000000001,p99:1.0564470000000001,p999:4.872703}},resources:{envoyGateway:{memory:{max:130.08984375,min:125.99609375,mean:128.72135416666666},cpu:{max:1.0666666666666662,min:.13333333333333347,mean:.3555555555555555}},envoyProxy:{memory:{max:23.609375,min:23.11328125,mean:23.408333333333335},cpu:{max:10.531097611033577,min:6.74744975768273,mean:10.076916047509108}}},poolOverflow:3,upstreamConnections:13,counters:{"benchmark.http_2xx":{value:35997,perSecond:404.46067415730334},"benchmark.pool_overflow":{value:3,perSecond:.033707865168539325},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:13,perSecond:.14606741573033707},upstream_cx_rx_bytes_total:{value:5651529,perSecond:63500.32584269663},upstream_cx_total:{value:13,perSecond:.14606741573033707},upstream_cx_tx_bytes_total:{value:1619865,perSecond:18200.73033707865},upstream_rq_pending_overflow:{value:3,perSecond:.033707865168539325},upstream_rq_pending_total:{value:13,perSecond:.14606741573033707},upstream_rq_total:{value:35997,perSecond:404.46067415730334}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1213.0224719101125,totalRequests:107959,latency:{max:63.63545499999999,min:.35260800000000003,mean:.487317,pstdev:.512447,percentiles:{p50:.450335,p75:.470415,p80:.47551899999999997,p90:.494223,p95:.538207,p99:1.389247,p999:5.619967}},resources:{envoyGateway:{memory:{max:137.29296875,min:135.15234375,mean:135.28619791666668},cpu:{max:2.0666666666666655,min:.13333333333333347,mean:.513333333333333}},envoyProxy:{memory:{max:29.578125,min:27.1796875,mean:29.144401041666665},cpu:{max:30.144766966475878,min:17.716992856688087,mean:26.46859586575745}}},poolOverflow:41,upstreamConnections:32,counters:{"benchmark.http_2xx":{value:107959,perSecond:1213.0224719101125},"benchmark.pool_overflow":{value:41,perSecond:.4606741573033708},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:32,perSecond:.3595505617977528},upstream_cx_rx_bytes_total:{value:16949563,perSecond:190444.52808988764},upstream_cx_total:{value:32,perSecond:.3595505617977528},upstream_cx_tx_bytes_total:{value:4858155,perSecond:54586.011235955055},upstream_rq_pending_overflow:{value:41,perSecond:.4606741573033708},upstream_rq_pending_total:{value:32,perSecond:.3595505617977528},upstream_rq_total:{value:107959,perSecond:1213.0224719101125}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:2020.2696629213483,totalRequests:179804,latency:{max:85.991423,min:.290608,mean:.49629199999999996,pstdev:.7787850000000001,percentiles:{p50:.43433499999999997,p75:.457519,p80:.464767,p90:.495855,p95:.6559670000000001,p99:1.870719,p999:7.932671000000001}},resources:{envoyGateway:{memory:{max:138.1015625,min:138.1015625,mean:138.1015625},cpu:{max:2.533333333333333,min:.13333333333333347,mean:.6111111111111112}},envoyProxy:{memory:{max:36.19140625,min:33.421875,mean:35.618489583333336},cpu:{max:46.994710251098866,min:46.994710251098866,mean:46.994710251098866}}},poolOverflow:196,upstreamConnections:54,counters:{"benchmark.http_2xx":{value:179804,perSecond:2020.2696629213483},"benchmark.pool_overflow":{value:196,perSecond:2.202247191011236},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:54,perSecond:.6067415730337079},upstream_cx_rx_bytes_total:{value:28229228,perSecond:317182.3370786517},upstream_cx_total:{value:54,perSecond:.6067415730337079},upstream_cx_tx_bytes_total:{value:8091180,perSecond:90912.13483146067},upstream_rq_pending_overflow:{value:196,perSecond:2.202247191011236},upstream_rq_pending_total:{value:54,perSecond:.6067415730337079},upstream_rq_total:{value:179804,perSecond:2020.2696629213483}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3199.4555555555557,totalRequests:287951,latency:{max:138.452991,min:.264784,mean:1.207951,pstdev:5.162012,percentiles:{p50:.5925750000000001,p75:.6785909999999999,p80:.7471030000000001,p90:1.249087,p95:2.074879,p99:12.977151,p999:89.747455}},resources:{envoyGateway:{memory:{max:144.7265625,min:142.16015625,mean:143.97526041666666},cpu:{max:5.066666666666677,min:.1333333333333305,mean:.9888888888888895}},envoyProxy:{memory:{max:68,min:58.19140625,mean:64.08984375},cpu:{max:68.22084858569042,min:41.70343299524441,mean:61.86047234637115}}},poolOverflow:49,upstreamConnections:326,counters:{"benchmark.http_2xx":{value:287951,perSecond:3199.4555555555557},"benchmark.pool_overflow":{value:49,perSecond:.5444444444444444},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:326,perSecond:3.6222222222222222},upstream_cx_rx_bytes_total:{value:45208307,perSecond:502314.52222222224},upstream_cx_total:{value:326,perSecond:3.6222222222222222},upstream_cx_tx_bytes_total:{value:12957795,perSecond:143975.5},upstream_rq_pending_overflow:{value:49,perSecond:.5444444444444444},upstream_rq_pending_total:{value:326,perSecond:3.6222222222222222},upstream_rq_total:{value:287951,perSecond:3199.4555555555557}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3999.177777777778,totalRequests:359926,latency:{max:443.858943,min:.264192,mean:3.7524490000000004,pstdev:15.938013000000002,percentiles:{p50:.711615,p75:1.2355829999999999,p80:1.5825909999999999,p90:3.236863,p95:7.336958999999999,p99:85.340159,p999:157.859839}},resources:{envoyGateway:{memory:{max:161.8671875,min:152.77734375,mean:160.35221354166666},cpu:{max:7.000000000000004,min:.19999999999998386,mean:1.3555555555555538}},envoyProxy:{memory:{max:92.54296875,min:84.4609375,mean:89.76236979166667},cpu:{max:80.72387478849407,min:44.87404051042136,mean:62.13861607744482}}},poolOverflow:71,upstreamConnections:329,counters:{"benchmark.http_2xx":{value:359926,perSecond:3999.177777777778},"benchmark.pool_overflow":{value:71,perSecond:.7888888888888889},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:329,perSecond:3.6555555555555554},upstream_cx_rx_bytes_total:{value:56508382,perSecond:627870.911111111},upstream_cx_total:{value:329,perSecond:3.6555555555555554},upstream_cx_tx_bytes_total:{value:16196805,perSecond:179964.5},upstream_rq_pending_overflow:{value:71,perSecond:.7888888888888889},upstream_rq_pending_total:{value:329,perSecond:3.6555555555555554},upstream_rq_total:{value:359929,perSecond:3999.211111111111}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5385.4,totalRequests:484686,latency:{max:1876.885503,min:1.8483200000000002,mean:58.245123,pstdev:26.072029,percentiles:{p50:56.051711,p75:65.304575,p80:67.309567,p90:71.97081499999999,p95:77.377535,p99:109.314047,p999:174.579711}},resources:{envoyGateway:{memory:{max:183.9609375,min:173.19921875,mean:174.90078125},cpu:{max:13.666666666666744,min:.19999999999991283,mean:2.4843792691346436}},envoyProxy:{memory:{max:143.34765625,min:135.33984375,mean:140.876171875},cpu:{max:99.63894164326153,min:98.67385725741774,mean:99.26863566184787}}},poolOverflow:84,upstreamConnections:316,counters:{"benchmark.http_2xx":{value:484686,perSecond:5385.4},"benchmark.pool_overflow":{value:84,perSecond:.9333333333333333},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:316,perSecond:3.511111111111111},upstream_cx_rx_bytes_total:{value:76095702,perSecond:845507.8},upstream_cx_total:{value:316,perSecond:3.511111111111111},upstream_cx_tx_bytes_total:{value:21825090,perSecond:242501},upstream_rq_pending_overflow:{value:84,perSecond:.9333333333333333},upstream_rq_pending_total:{value:316,perSecond:3.511111111111111},upstream_rq_total:{value:485002,perSecond:5388.9111111111115}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3999.0222222222224,totalRequests:359912,latency:{max:332.857343,min:.26344,mean:2.509089,pstdev:9.775503,percentiles:{p50:.6791670000000001,p75:1.0431030000000001,p80:1.311679,p90:2.827135,p95:5.955071,p99:55.834623,p999:98.39411100000001}},resources:{envoyGateway:{memory:{max:190.32421875,min:158.69921875,mean:164.38671875},cpu:{max:.2666666666667084,min:.1333333333333068,mean:.20000000000000753}},envoyProxy:{memory:{max:148.25390625,min:141.0546875,mean:143.53841145833334},cpu:{max:80.86865352647818,min:44.001111287746824,mean:74.12282990985476}}},poolOverflow:86,upstreamConnections:314,counters:{"benchmark.http_2xx":{value:359912,perSecond:3999.0222222222224},"benchmark.pool_overflow":{value:86,perSecond:.9555555555555556},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:314,perSecond:3.488888888888889},upstream_cx_rx_bytes_total:{value:56506184,perSecond:627846.4888888889},upstream_cx_total:{value:314,perSecond:3.488888888888889},upstream_cx_tx_bytes_total:{value:16196130,perSecond:179957},upstream_rq_pending_overflow:{value:86,perSecond:.9555555555555556},upstream_rq_pending_total:{value:314,perSecond:3.488888888888889},upstream_rq_total:{value:359914,perSecond:3999.0444444444443}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3198.988888888889,totalRequests:287909,latency:{max:116.113407,min:.277152,mean:1.150514,pstdev:3.81955,percentiles:{p50:.591263,p75:.679039,p80:.7616949999999999,p90:1.3676789999999999,p95:2.382847,p99:14.532606999999999,p999:55.408639}},resources:{envoyGateway:{memory:{max:159.09375,min:157.96875,mean:158.69596354166666},cpu:{max:.2668979782478565,min:.1333333333333068,mean:.1939919647532957}},envoyProxy:{memory:{max:142.52734375,min:141.1953125,mean:141.98515625},cpu:{max:68.17021856339512,min:46.6719064597314,mean:66.0963438187755}}},poolOverflow:90,upstreamConnections:221,counters:{"benchmark.http_2xx":{value:287909,perSecond:3198.988888888889},"benchmark.pool_overflow":{value:90,perSecond:1},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:221,perSecond:2.4555555555555557},upstream_cx_rx_bytes_total:{value:45201713,perSecond:502241.2555555556},upstream_cx_total:{value:221,perSecond:2.4555555555555557},upstream_cx_tx_bytes_total:{value:12955950,perSecond:143955},upstream_rq_pending_overflow:{value:90,perSecond:1},upstream_rq_pending_total:{value:221,perSecond:2.4555555555555557},upstream_rq_total:{value:287910,perSecond:3199}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:2020.6966292134832,totalRequests:179842,latency:{max:83.697663,min:.286272,mean:.5179819999999999,pstdev:.9698060000000001,percentiles:{p50:.442751,p75:.464303,p80:.470031,p90:.495839,p95:.679071,p99:2.114815,p999:10.049535}},resources:{envoyGateway:{memory:{max:168.8359375,min:149.0625,mean:153.08723958333334},cpu:{max:4.066666666666663,min:.13333333333340155,mean:.9599999999999984}},envoyProxy:{memory:{max:141.69921875,min:141.21875,mean:141.47200520833334},cpu:{max:48.569813084112255,min:48.077679610985385,mean:48.32794707266626}}},poolOverflow:158,upstreamConnections:63,counters:{"benchmark.http_2xx":{value:179842,perSecond:2020.6966292134832},"benchmark.pool_overflow":{value:158,perSecond:1.7752808988764044},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:63,perSecond:.7078651685393258},upstream_cx_rx_bytes_total:{value:28235194,perSecond:317249.37078651687},upstream_cx_total:{value:63,perSecond:.7078651685393258},upstream_cx_tx_bytes_total:{value:8092890,perSecond:90931.34831460674},upstream_rq_pending_overflow:{value:158,perSecond:1.7752808988764044},upstream_rq_pending_total:{value:63,perSecond:.7078651685393258},upstream_rq_total:{value:179842,perSecond:2020.6966292134832}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1212.5280898876404,totalRequests:107915,latency:{max:66.39001499999999,min:.34712000000000004,mean:.501021,pstdev:.9397420000000001,percentiles:{p50:.45027100000000003,p75:.468511,p80:.473327,p90:.490223,p95:.5424950000000001,p99:1.3708150000000001,p999:9.019903}},resources:{envoyGateway:{memory:{max:150.3125,min:138.4140625,mean:140.31223958333334},cpu:{max:.2000000000000076,min:.1333333333333068,mean:.17878787878789712}},envoyProxy:{memory:{max:141.70703125,min:140.8828125,mean:141.17109375},cpu:{max:30.12063364308174,min:19.692582564011218,mean:28.7662632231051}}},poolOverflow:85,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:107915,perSecond:1212.5280898876404},"benchmark.pool_overflow":{value:85,perSecond:.9550561797752809},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:38,perSecond:.42696629213483145},upstream_cx_rx_bytes_total:{value:16942655,perSecond:190366.91011235956},upstream_cx_total:{value:38,perSecond:.42696629213483145},upstream_cx_tx_bytes_total:{value:4856175,perSecond:54563.76404494382},upstream_rq_pending_overflow:{value:85,perSecond:.9550561797752809},upstream_rq_pending_total:{value:38,perSecond:.42696629213483145},upstream_rq_total:{value:107915,perSecond:1212.5280898876404}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:399.96666666666664,totalRequests:35997,latency:{max:57.362431,min:.38779199999999997,mean:.49359100000000006,pstdev:.429145,percentiles:{p50:.468223,p75:.486559,p80:.491615,p90:.507215,p95:.528639,p99:1.005791,p999:4.174847}},resources:{envoyGateway:{memory:{max:145.31640625,min:139.6640625,mean:144.648828125},cpu:{max:.20000000000000764,min:.1333333333333068,mean:.17222222222221562}},envoyProxy:{memory:{max:140.9921875,min:140.70703125,mean:140.89322916666666},cpu:{max:10.635300213744282,min:7.031060889842074,mean:9.981794070354459}}},poolOverflow:3,upstreamConnections:11,counters:{"benchmark.http_2xx":{value:35997,perSecond:399.96666666666664},"benchmark.pool_overflow":{value:3,perSecond:.03333333333333333},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:11,perSecond:.12222222222222222},upstream_cx_rx_bytes_total:{value:5651529,perSecond:62794.76666666667},upstream_cx_total:{value:11,perSecond:.12222222222222222},upstream_cx_tx_bytes_total:{value:1619865,perSecond:17998.5},upstream_rq_pending_overflow:{value:3,perSecond:.03333333333333333},upstream_rq_pending_total:{value:11,perSecond:.12222222222222222},upstream_rq_total:{value:35997,perSecond:399.96666666666664}}}]},m5=[Cse,kse,Pse,Ose,Sse,bse,wse,xse,_se,Die,Lie,Hie,Gie,Bie,Fie,zie,Uie,Wie,Vie,Kie,Xie,Yie,Qie,Zie,Jie,ese,tse,nse,rse,ase,ose,ise,sse,use,lse,cse,pse,mse,dse,fse,vse,hse,yse,gse],Ase=()=>m5.map(e=>e.metadata.version),xi=m5.find(e=>e.metadata.version==="1.4.1"),Pt=(xi==null?void 0:xi.results)||[];xi!=null&&xi.metadata.testConfiguration;Pt.length,Pt.filter(e=>e.phase==="scaling-up").length,Pt.filter(e=>e.phase==="scaling-down").length,Pt.length>0&&Math.max(...Pt.map(e=>e.routes)),Pt.length>0&&Math.min(...Pt.map(e=>e.routes)),Pt.length>0&&Pt.reduce((e,t)=>e+t.throughput,0)/Pt.length,Pt.length>0&&Pt.reduce((e,t)=>e+t.latency.mean,0)/Pt.length;Pt.map(e=>({routes:e.routes,phase:e.phase,p50:e.latency.percentiles.p50,p75:e.latency.percentiles.p75,p90:e.latency.percentiles.p90,p95:e.latency.percentiles.p95,p99:e.latency.percentiles.p99,p999:e.latency.percentiles.p999}));Pt.map(e=>({routes:e.routes,phase:e.phase,envoyGatewayMemory:e.resources.envoyGateway.memory.mean,envoyGatewayCpu:e.resources.envoyGateway.cpu.mean,envoyProxyMemory:e.resources.envoyProxy.memory.mean,envoyProxyCpu:e.resources.envoyProxy.cpu.mean}));Pt.map(e=>({testName:e.testName,routes:e.routes,phase:e.phase,throughput:e.throughput,meanLatency:e.latency.mean,p95Latency:e.latency.percentiles.p95,totalMemory:e.resources.envoyGateway.memory.mean+e.resources.envoyProxy.memory.mean,totalCpu:e.resources.envoyGateway.cpu.mean+e.resources.envoyProxy.cpu.mean}));const Ese=()=>{const e=Ase(),[t,n]=P.useState(e[0]||""),r=P.useMemo(()=>m5.find(o=>o.metadata.version===t),[t]),a=P.useMemo(()=>{if(!r)return{benchmarkResults:[],testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"},performanceSummary:{totalTests:0,scaleUpTests:0,scaleDownTests:0,maxRoutes:0,minRoutes:0,avgThroughput:0,avgLatency:0},latencyPercentileComparison:[],resourceTrends:[],performanceMatrix:[],metadata:null};const o=r.results;return{benchmarkResults:o,testConfiguration:r.metadata.testConfiguration,performanceSummary:{totalTests:o.length,scaleUpTests:o.filter(i=>i.phase==="scaling-up").length,scaleDownTests:o.filter(i=>i.phase==="scaling-down").length,maxRoutes:o.length>0?Math.max(...o.map(i=>i.routes)):0,minRoutes:o.length>0?Math.min(...o.map(i=>i.routes)):0,avgThroughput:o.length>0?o.reduce((i,s)=>i+s.throughput,0)/o.length:0,avgLatency:o.length>0?o.reduce((i,s)=>i+s.latency.mean,0)/o.length:0},latencyPercentileComparison:o.map(i=>({routes:i.routes,phase:i.phase,p50:i.latency.percentiles.p50,p75:i.latency.percentiles.p75,p90:i.latency.percentiles.p90,p95:i.latency.percentiles.p95,p99:i.latency.percentiles.p99,p999:i.latency.percentiles.p999})),resourceTrends:o.map(i=>({routes:i.routes,phase:i.phase,envoyGatewayMemory:i.resources.envoyGateway.memory.mean,envoyGatewayCpu:i.resources.envoyGateway.cpu.mean,envoyProxyMemory:i.resources.envoyProxy.memory.mean,envoyProxyCpu:i.resources.envoyProxy.cpu.mean})),performanceMatrix:o.map(i=>({testName:i.testName,routes:i.routes,phase:i.phase,throughput:i.throughput,meanLatency:i.latency.mean,p95Latency:i.latency.percentiles.p95,totalMemory:i.resources.envoyGateway.memory.mean+i.resources.envoyProxy.memory.mean,totalCpu:i.resources.envoyGateway.cpu.mean+i.resources.envoyProxy.cpu.mean})),metadata:r.metadata}},[r]);return{selectedVersion:t,setSelectedVersion:n,availableVersions:e,...a}},Nse=({apiBase:e="https://envoy-gateway-benchmark-report.netlify.app/api",initialVersion:t,theme:n="light",containerClassName:r="",features:a={header:!1,versionSelector:!0,summaryCards:!0,tabs:["overview","latency","resources"]}})=>{var i,s,u,l,p,c;const o=Ese();return P.useEffect(()=>{n==="dark"?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")},[n]),P.useEffect(()=>{const m=document.createElement("style");return m.textContent=` +`)}}):null},qr=Or,vr=R.forwardRef(({active:e,payload:t,className:n,indicator:r="dot",hideLabel:a=!1,hideIndicator:i=!1,label:u,labelFormatter:l,labelClassName:c,formatter:m,color:f,nameKey:d,labelKey:v},_)=>{const{config:w}=GA(),g=R.useMemo(()=>{var P;if(a||!(t!=null&&t.length))return null;const[b]=t,O=`${v||b.dataKey||b.name||"value"}`,C=Ev(w,b,O),k=!v&&typeof u=="string"?((P=w[u])==null?void 0:P.label)||u:C==null?void 0:C.label;return l?E.jsx("div",{className:Je("font-medium",c),children:l(k,t)}):k?E.jsx("div",{className:Je("font-medium",c),children:k}):null},[u,l,t,a,c,w,v]);if(!e||!(t!=null&&t.length))return null;const y=t.length===1&&r!=="dot";return E.jsxs("div",{ref:_,className:Je("grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border/50 bg-background px-2.5 py-1.5 text-xs shadow-xl",n),children:[y?null:g,E.jsx("div",{className:"grid gap-1.5",children:t.map((b,O)=>{const C=`${d||b.name||b.dataKey||"value"}`,k=Ev(w,b,C),P=f||b.payload.fill||b.color;return E.jsx("div",{className:Je("flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground",r==="dot"&&"items-center"),children:m&&(b==null?void 0:b.value)!==void 0&&b.name?m(b.value,b.name,b,O,b.payload):E.jsxs(E.Fragment,{children:[k!=null&&k.icon?E.jsx(k.icon,{}):!i&&E.jsx("div",{className:Je("shrink-0 rounded-[2px] border-[--color-border] bg-[--color-bg]",{"h-2.5 w-2.5":r==="dot","w-1":r==="line","w-0 border-[1.5px] border-dashed bg-transparent":r==="dashed","my-0.5":y&&r==="dashed"}),style:{"--color-bg":P,"--color-border":P}}),E.jsxs("div",{className:Je("flex flex-1 justify-between leading-none",y?"items-end":"items-center"),children:[E.jsxs("div",{className:"grid gap-1.5",children:[y?g:null,E.jsx("span",{className:"text-muted-foreground",children:(k==null?void 0:k.label)||b.name})]}),b.value&&E.jsx("span",{className:"font-mono font-medium tabular-nums text-foreground",children:b.value.toLocaleString()})]})]})},b.dataKey)})})]})});vr.displayName="ChartTooltip";const gJ=R.forwardRef(({className:e,hideIcon:t=!1,payload:n,verticalAlign:r="bottom",nameKey:a},i)=>{const{config:u}=GA();return n!=null&&n.length?E.jsx("div",{ref:i,className:Je("flex items-center justify-center gap-4",r==="top"?"pb-3":"pt-3",e),children:n.map(l=>{const c=`${a||l.dataKey||"value"}`,m=Ev(u,l,c);return E.jsxs("div",{className:Je("flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"),children:[m!=null&&m.icon&&!t?E.jsx(m.icon,{}):E.jsx("div",{className:"h-2 w-2 shrink-0 rounded-[2px]",style:{backgroundColor:l.color}}),m==null?void 0:m.label]},l.value)})}):null});gJ.displayName="ChartLegend";function Ev(e,t,n){if(typeof t!="object"||t===null)return;const r="payload"in t&&typeof t.payload=="object"&&t.payload!==null?t.payload:void 0;let a=n;return n in t&&typeof t[n]=="string"?a=t[n]:r&&n in r&&typeof r[n]=="string"&&(a=r[n]),a in e?e[a]:e[n]}const xJ={empty:{icon:uO,title:"No Data Available",description:"There is no data to display at the moment."},error:{icon:Xj,title:"Failed to Load Data",description:"An error occurred while loading the data. Please try again."},loading:{icon:cO,title:"Loading Data",description:"Please wait while we fetch the latest information."},"no-data":{icon:aO,title:"No Chart Data",description:"No data available to display in the chart."}},wJ=({type:e="empty",title:t,description:n,action:r,className:a})=>{const i=xJ[e],u=i.icon;return E.jsx(Ke,{className:`border-dashed ${a}`,children:E.jsxs(Ye,{className:"flex flex-col items-center justify-center py-12 px-6 text-center",children:[E.jsx("div",{className:"rounded-full bg-gray-100 p-3 mb-4",children:E.jsx(u,{className:`h-8 w-8 text-gray-400 ${e==="loading"?"animate-spin":""}`})}),E.jsx(Xe,{className:"text-lg font-medium text-gray-900 mb-2",children:t||i.title}),E.jsx("p",{className:"text-sm text-gray-500 mb-6 max-w-sm",children:n||i.description}),r&&E.jsxs(Wp,{onClick:r.onClick,variant:"outline",size:"sm",children:[E.jsx(cO,{className:"h-4 w-4 mr-2"}),r.label]})]})})},hr=({onRetry:e})=>E.jsx(wJ,{type:"no-data",title:"No Chart Data",description:"Unable to generate chart with the current data set.",action:e?{label:"Retry",onClick:e}:void 0}),jr=({text:e="Kind Cluster / GitHub CI",position:t="top-center",className:n=""})=>{const r=()=>{switch(t){case"bottom-left":return"bottom-8 left-4";case"bottom-right":return"bottom-8 right-4";case"bottom-center":return"bottom-8 left-1/2 transform -translate-x-1/2";case"top-left":return"top-4 left-4";case"top-right":return"top-4 right-4";case"top-center":return"left-1/2 transform -translate-x-1/2 -translate-y-1/2";default:return"bottom-8 left-1/2 transform -translate-x-1/2"}};return E.jsxs("div",{className:`absolute ${r()} z-10 flex items-center gap-1 px-2 py-1 bg-indigo-600/40 rounded-md border border-gray-200/30 shadow-sm ${n}`,children:[E.jsx(lO,{className:"h-3 w-3 text-white"}),E.jsx("span",{className:"text-xs text-white font-medium",children:e})]})},bJ=({performanceMatrix:e,benchmarkResults:t,testConfiguration:n,performanceSummary:r,latencyPercentileComparison:a})=>{const i=e.filter(d=>d.phase==="scaling-up").map(d=>({routes:d.routes,throughput:Math.round(d.throughput),latency:Number(d.meanLatency.toFixed(1))})),u=t.filter(d=>d.phase==="scaling-up").map(d=>({routes:d.routes,gateway:Math.round(d.resources.envoyGateway.memory.mean),proxy:Math.round(d.resources.envoyProxy.memory.mean),total:Math.round(d.resources.envoyGateway.memory.mean+d.resources.envoyProxy.memory.mean)})),c=(()=>{if(a&&a.length>0){const d=a.filter(v=>v.phase==="scaling-up").sort((v,_)=>_.routes-v.routes)[0];if(d)return[{percentile:"P50",value:Number(d.p50.toFixed(1)),status:"excellent"},{percentile:"P75",value:Number(d.p75.toFixed(1)),status:"excellent"},{percentile:"P90",value:Number(d.p90.toFixed(1)),status:"good"},{percentile:"P95",value:Number(d.p95.toFixed(1)),status:"acceptable"},{percentile:"P99",value:Number(d.p99.toFixed(1)),status:"watch"}]}if(t&&t.length>0){const d=t.filter(v=>v.phase==="scaling-up").sort((v,_)=>_.routes-v.routes)[0];if(d&&d.latency&&d.latency.percentiles){const v=d.latency.percentiles;return[{percentile:"P50",value:Number(v.p50.toFixed(1)),status:"excellent"},{percentile:"P75",value:Number(v.p75.toFixed(1)),status:"excellent"},{percentile:"P90",value:Number(v.p90.toFixed(1)),status:"good"},{percentile:"P95",value:Number(v.p95.toFixed(1)),status:"acceptable"},{percentile:"P99",value:Number(v.p99.toFixed(1)),status:"watch"}]}}return null})(),m=u.map(d=>({routes:d.routes,gatewayPerRoute:Number((d.gateway/d.routes).toFixed(2)),proxyPerRoute:Number((d.proxy/d.routes).toFixed(2)),totalPerRoute:Number((d.total/d.routes).toFixed(2))})),f={throughput:{label:"Throughput",color:"#8b5cf6"},latency:{label:"Latency",color:"#6366f1"},gateway:{label:"Gateway",color:"#a855f7"},proxy:{label:"Proxy",color:"#4f46e5"},totalPerRoute:{label:"Total per Route",color:"#8b5cf6"},gatewayPerRoute:{label:"Gateway per Route",color:"#a855f7"},proxyPerRoute:{label:"Proxy per Route",color:"#4f46e5"}};return E.jsxs("div",{className:"space-y-6",children:[E.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[E.jsxs(Ke,{children:[E.jsxs(Ze,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[E.jsx(Xe,{className:"text-sm font-medium",children:"Avg Throughput"}),E.jsx(rM,{className:"h-4 w-4 text-muted-foreground"})]}),E.jsxs(Ye,{children:[E.jsxs("div",{className:"text-2xl font-bold",children:[Math.round(r.avgThroughput)," RPS"]}),E.jsx("p",{className:"text-xs text-muted-foreground",children:"Consistent across all scales"})]})]}),E.jsxs(Ke,{children:[E.jsxs(Ze,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[E.jsx(Xe,{className:"text-sm font-medium",children:"Mean Response Time"}),E.jsx(sO,{className:"h-4 w-4 text-muted-foreground"})]}),E.jsxs(Ye,{children:[E.jsxs("div",{className:"text-2xl font-bold",children:[r.avgLatency.toFixed(1),"ms"]}),E.jsx("p",{className:"text-xs text-muted-foreground",children:"End-to-end as measured by Nighthawk"})]})]}),E.jsxs(Ke,{children:[E.jsxs(Ze,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[E.jsx(Xe,{className:"text-sm font-medium",children:"Max Routes in Test"}),E.jsx(mO,{className:"h-4 w-4 text-muted-foreground"})]}),E.jsxs(Ye,{children:[E.jsx("div",{className:"text-2xl font-bold",children:r.maxRoutes}),E.jsx("p",{className:"text-xs text-muted-foreground",children:"Routes tested successfully"})]})]}),E.jsxs(Ke,{children:[E.jsxs(Ze,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[E.jsx(Xe,{className:"text-sm font-medium",children:"Reliability"}),E.jsx(eM,{className:"h-4 w-4 text-muted-foreground"})]}),E.jsxs(Ye,{children:[E.jsx("div",{className:"text-2xl font-bold",children:"100%"}),E.jsx("p",{className:"text-xs text-muted-foreground",children:"Perfect system reliability"})]})]})]}),E.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[E.jsxs(Ke,{children:[E.jsxs(Ze,{children:[E.jsx(Xe,{children:"Throughput Consistency"}),E.jsx(jn,{children:"Throughput remains stable across different route scales"})]}),E.jsx(Ye,{children:i&&i.length>0?E.jsxs("div",{className:"relative",children:[E.jsx(jr,{}),E.jsx(fr,{config:f,children:E.jsxs(V1,{data:i,children:[E.jsx(dr,{strokeDasharray:"3 3"}),E.jsx(sn,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),E.jsx(Vt,{domain:[0,"dataMax"],tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:d=>`${d}`}),E.jsx(qr,{content:E.jsx(vr,{formatter:(d,v)=>[`${d} RPS`,"Throughput"],labelFormatter:d=>`${d} routes`})}),E.jsx(Kt,{dataKey:"throughput",type:"monotone",fill:"#8b5cf6",fillOpacity:.4,stroke:"#8b5cf6",strokeWidth:2})]})})]}):E.jsx(hr,{})})]}),E.jsxs(Ke,{children:[E.jsxs(Ze,{children:[E.jsx(Xe,{children:"Memory Usage"}),E.jsx(jn,{children:"Memory scaling patterns for Gateway and Proxy components"})]}),E.jsx(Ye,{children:u&&u.length>0?E.jsxs("div",{className:"relative",children:[E.jsx(jr,{}),E.jsx(fr,{config:f,children:E.jsxs(V1,{data:u,children:[E.jsx(dr,{strokeDasharray:"3 3"}),E.jsx(sn,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),E.jsx(Vt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:d=>`${d}MB`}),E.jsx(qr,{content:E.jsx(vr,{})}),E.jsx(Kt,{dataKey:"gateway",type:"monotone",fill:"#a855f7",fillOpacity:.4,stroke:"#a855f7",strokeWidth:2}),E.jsx(Kt,{dataKey:"proxy",type:"monotone",fill:"#4f46e5",fillOpacity:.4,stroke:"#4f46e5",strokeWidth:2})]})})]}):E.jsx(hr,{})})]})]}),E.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[E.jsxs(Ke,{children:[E.jsxs(Ze,{children:[E.jsx(Xe,{children:"Request RTT Distribution"}),E.jsx(jn,{children:"Latency percentiles at 1000 routes (worst case)"})]}),E.jsx(Ye,{children:c?E.jsxs("div",{className:"relative",children:[E.jsx(jr,{}),E.jsx(fr,{config:f,children:E.jsxs(LA,{data:c,children:[E.jsx(dr,{strokeDasharray:"3 3"}),E.jsx(sn,{dataKey:"percentile",tickLine:!1,axisLine:!1,tickMargin:8}),E.jsx(Vt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:d=>`${d}ms`}),E.jsx(qr,{content:E.jsx(vr,{formatter:(d,v)=>[`${d}ms`,"Latency"]})}),E.jsx(ga,{dataKey:"value",fill:"#6366f1",radius:[4,4,0,0]})]})})]}):E.jsx(hr,{})})]}),E.jsxs(Ke,{children:[E.jsxs(Ze,{children:[E.jsx(Xe,{children:"Memory Efficiency"}),E.jsx(jn,{children:"Memory usage per route shows how efficiently memory scales with route count"})]}),E.jsx(Ye,{children:m&&m.length>0?E.jsxs("div",{className:"relative",children:[E.jsx(jr,{}),E.jsx(fr,{config:f,children:E.jsxs(th,{data:m,children:[E.jsx(dr,{strokeDasharray:"3 3"}),E.jsx(sn,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),E.jsx(Vt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:d=>`${d}MB`}),E.jsx(qr,{content:E.jsx(vr,{formatter:(d,v)=>[`${d}MB per route`,v==="gatewayPerRoute"?"Gateway":v==="proxyPerRoute"?"Proxy":"Total"],labelFormatter:d=>`${d} routes`})}),E.jsx(xn,{dataKey:"totalPerRoute",type:"monotone",stroke:"#8b5cf6",strokeWidth:3,dot:{fill:"#8b5cf6",strokeWidth:2,r:4}}),E.jsx(xn,{dataKey:"gatewayPerRoute",type:"monotone",stroke:"#a855f7",strokeWidth:2,strokeDasharray:"5 5",dot:{fill:"#a855f7",strokeWidth:2,r:3}}),E.jsx(xn,{dataKey:"proxyPerRoute",type:"monotone",stroke:"#4f46e5",strokeWidth:2,strokeDasharray:"3 3",dot:{fill:"#4f46e5",strokeWidth:2,r:3}})]})})]}):E.jsx(hr,{})})]})]})]})},SJ=({latencyPercentileComparison:e,benchmarkResults:t})=>{const n=e.filter(d=>d.phase==="scaling-up").map(d=>({routes:d.routes,p50:Number(d.p50.toFixed(1)),p95:Number(d.p95.toFixed(1)),p99:Number(d.p99.toFixed(1))})),a=(()=>{if(e&&e.length>0){const d=e.filter(v=>v.phase==="scaling-up").sort((v,_)=>_.routes-v.routes)[0];if(d)return[{percentile:"P50",value:Number(d.p50.toFixed(1)),category:"Median",status:"excellent"},{percentile:"P75",value:Number(d.p75.toFixed(1)),category:"75th",status:"excellent"},{percentile:"P90",value:Number(d.p90.toFixed(1)),category:"90th",status:"good"},{percentile:"P95",value:Number(d.p95.toFixed(1)),category:"95th",status:"watch"},{percentile:"P99",value:Number(d.p99.toFixed(1)),category:"99th",status:"alert"}]}if(t&&t.length>0){const d=t.filter(v=>v.phase==="scaling-up").sort((v,_)=>_.routes-v.routes)[0];if(d&&d.latency&&d.latency.percentiles){const v=d.latency.percentiles;return[{percentile:"P50",value:Number(v.p50.toFixed(1)),category:"Median",status:"excellent"},{percentile:"P75",value:Number(v.p75.toFixed(1)),category:"75th",status:"excellent"},{percentile:"P90",value:Number(v.p90.toFixed(1)),category:"90th",status:"good"},{percentile:"P95",value:Number(v.p95.toFixed(1)),category:"95th",status:"watch"},{percentile:"P99",value:Number(v.p99.toFixed(1)),category:"99th",status:"alert"}]}}return null})(),i=t.filter(d=>d.phase==="scaling-up").map(d=>({routes:d.routes,mean:Number(d.latency.mean.toFixed(1)),p95:Number(d.latency.percentiles.p95.toFixed(1)),ratio:Number((d.latency.percentiles.p95/d.latency.mean).toFixed(1))})),l=e&&e.length>0?e.filter(d=>d.phase==="scaling-up").sort((d,v)=>d.routes-v.routes).map(d=>({scale:`${d.routes} Routes`,p50:Number(d.p50.toFixed(1)),p95:Number(d.p95.toFixed(1)),p99:Number(d.p99.toFixed(1))})):null,c={p50:{label:"P50 (Median)",color:"#8b5cf6"},p95:{label:"P95",color:"#6366f1"},p99:{label:"P99",color:"#4f46e5"},mean:{label:"Mean",color:"#a855f7"},ratio:{label:"P95/Mean Ratio",color:"#7c3aed"}},f=(()=>{if(n.length===0)return{medianLatency:0,p95Latency:0,p99Latency:0,consistencyRatio:0};const d=n[n.length-1],v=i.length>0?i.reduce((_,w)=>_+w.ratio,0)/i.length:0;return{medianLatency:(d==null?void 0:d.p50)||0,p95Latency:(d==null?void 0:d.p95)||0,p99Latency:(d==null?void 0:d.p99)||0,consistencyRatio:v}})();return E.jsxs("div",{className:"space-y-6",children:[E.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[E.jsxs(Ke,{children:[E.jsxs(Ze,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[E.jsx(Xe,{className:"text-sm font-medium",children:"Median RTT"}),E.jsx(tM,{className:"h-4 w-4 text-muted-foreground"})]}),E.jsxs(Ye,{children:[E.jsxs("div",{className:"text-2xl font-bold",children:[f.medianLatency.toFixed(1),"ms"]}),E.jsx("p",{className:"text-xs text-muted-foreground",children:"Consistent across all scales"})]})]}),E.jsxs(Ke,{children:[E.jsxs(Ze,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[E.jsx(Xe,{className:"text-sm font-medium",children:"P95 RTT"}),E.jsx(Zj,{className:"h-4 w-4 text-muted-foreground"})]}),E.jsxs(Ye,{children:[E.jsxs("div",{className:"text-2xl font-bold",children:[f.p95Latency.toFixed(1),"ms"]}),E.jsxs("p",{className:"text-xs text-muted-foreground",children:["95% of requests under ",f.p95Latency.toFixed(0),"ms"]})]})]}),E.jsxs(Ke,{children:[E.jsxs(Ze,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[E.jsx(Xe,{className:"text-sm font-medium",children:"Tail RTT"}),E.jsx(nM,{className:"h-4 w-4 text-muted-foreground"})]}),E.jsxs(Ye,{children:[E.jsxs("div",{className:"text-2xl font-bold",children:[f.p99Latency.toFixed(1),"ms"]}),E.jsx("p",{className:"text-xs text-muted-foreground",children:"P99 RTT (1% of requests)"})]})]}),E.jsxs(Ke,{children:[E.jsxs(Ze,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[E.jsx(Xe,{className:"text-sm font-medium",children:"Consistency"}),E.jsx(iO,{className:"h-4 w-4 text-muted-foreground"})]}),E.jsxs(Ye,{children:[E.jsxs("div",{className:"text-2xl font-bold",children:[f.consistencyRatio.toFixed(1),":1"]}),E.jsx("p",{className:"text-xs text-muted-foreground",children:"P95/Mean ratio"})]})]})]}),E.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[E.jsxs(Ke,{children:[E.jsxs(Ze,{children:[E.jsx(Xe,{children:"Request RTT Scaling Behavior"}),E.jsx(jn,{children:"How key percentiles perform as route count increases"})]}),E.jsx(Ye,{children:n&&n.length>0?E.jsxs("div",{className:"relative",children:[E.jsx(jr,{}),E.jsx(fr,{config:c,children:E.jsxs(V1,{data:n,children:[E.jsx(dr,{strokeDasharray:"3 3"}),E.jsx(sn,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),E.jsx(Vt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:d=>`${d}ms`}),E.jsx(qr,{content:E.jsx(vr,{labelFormatter:d=>`${d} routes`})}),E.jsx(Kt,{dataKey:"p99",type:"monotone",fill:"#4f46e5",fillOpacity:.2,stroke:"#4f46e5",strokeWidth:2}),E.jsx(Kt,{dataKey:"p95",type:"monotone",fill:"#6366f1",fillOpacity:.3,stroke:"#6366f1",strokeWidth:2}),E.jsx(Kt,{dataKey:"p50",type:"monotone",fill:"#8b5cf6",fillOpacity:.4,stroke:"#8b5cf6",strokeWidth:2})]})})]}):E.jsx(hr,{})})]}),E.jsxs(Ke,{children:[E.jsxs(Ze,{children:[E.jsx(Xe,{children:"Request RTT Distribution"}),E.jsx(jn,{children:"Percentile breakdown at 1000 routes (worst case scenario)"})]}),E.jsx(Ye,{children:a?E.jsxs("div",{className:"relative",children:[E.jsx(jr,{}),E.jsx(fr,{config:c,children:E.jsxs(LA,{data:a,children:[E.jsx(dr,{strokeDasharray:"3 3"}),E.jsx(sn,{dataKey:"percentile",tickLine:!1,axisLine:!1,tickMargin:8}),E.jsx(Vt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:d=>`${d}ms`}),E.jsx(qr,{content:E.jsx(vr,{formatter:(d,v)=>[`${d}ms`,"RTT"],labelFormatter:d=>`${d} Percentile`})}),E.jsx(ga,{dataKey:"value",fill:"#6366f1",radius:[4,4,0,0]})]})})]}):E.jsx(hr,{})})]})]}),E.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[E.jsxs(Ke,{children:[E.jsxs(Ze,{children:[E.jsx(Xe,{children:"Request RTT Consistency"}),E.jsx(jn,{children:"P95/Mean ratio shows how predictable RTT is"})]}),E.jsx(Ye,{children:i&&i.length>0?E.jsxs("div",{className:"relative",children:[E.jsx(jr,{}),E.jsx(fr,{config:c,children:E.jsxs(th,{data:i,children:[E.jsx(dr,{strokeDasharray:"3 3"}),E.jsx(sn,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),E.jsx(Vt,{yAxisId:"ratio",orientation:"left",tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:d=>`${d}x`}),E.jsx(Vt,{yAxisId:"latency",orientation:"right",tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:d=>`${d}ms`}),E.jsx(qr,{content:E.jsx(vr,{labelFormatter:d=>`${d} routes`})}),E.jsx(xn,{yAxisId:"latency",dataKey:"mean",type:"monotone",stroke:"#a855f7",strokeWidth:2,dot:{fill:"#a855f7",strokeWidth:2,r:3}}),E.jsx(xn,{yAxisId:"ratio",dataKey:"ratio",type:"monotone",stroke:"#7c3aed",strokeWidth:3,strokeDasharray:"5 5",dot:{fill:"#7c3aed",strokeWidth:2,r:4}})]})})]}):E.jsx(hr,{})})]}),E.jsxs(Ke,{children:[E.jsxs(Ze,{children:[E.jsx(Xe,{children:"Performance Summary"}),E.jsx(jn,{children:"RTT performance at different scales"})]}),E.jsx(Ye,{children:l&&l.length>0?E.jsx("div",{className:"space-y-4",children:l.map((d,v)=>E.jsx("div",{className:"flex items-center justify-between p-3 bg-muted/30 rounded-lg",children:E.jsxs("div",{className:"space-y-1",children:[E.jsx("p",{className:"font-medium",children:d.scale}),E.jsxs("div",{className:"flex space-x-4 text-sm text-muted-foreground",children:[E.jsxs("span",{children:["P50: ",d.p50,"ms"]}),E.jsxs("span",{children:["P95: ",d.p95,"ms"]}),E.jsxs("span",{children:["P99: ",d.p99,"ms"]})]})]})},v))}):E.jsx(hr,{})})]})]})]})},PJ=({resourceTrends:e,benchmarkResults:t})=>{const n=t.filter(v=>v.phase==="scaling-up").map(v=>({routes:v.routes,gateway:Math.round(v.resources.envoyGateway.memory.mean),proxy:Math.round(v.resources.envoyProxy.memory.mean),total:Math.round(v.resources.envoyGateway.memory.mean+v.resources.envoyProxy.memory.mean)})),r=t.filter(v=>v.phase==="scaling-up").map(v=>({routes:v.routes,gatewayMean:Number(v.resources.envoyGateway.cpu.mean.toFixed(1)),gatewayMax:Number(v.resources.envoyGateway.cpu.max.toFixed(1)),proxyMean:Number(v.resources.envoyProxy.cpu.mean.toFixed(1)),proxyMax:Number(v.resources.envoyProxy.cpu.max.toFixed(1))})),a=n.map(v=>({routes:v.routes,gatewayPerRoute:Number((v.gateway/v.routes).toFixed(2)),proxyPerRoute:Number((v.proxy/v.routes).toFixed(2)),totalPerRoute:Number((v.total/v.routes).toFixed(2))})),i=()=>{if(n.length===0)return[{component:"Gateway",min:0,max:0,scaling:"No Data",efficiency:"Unknown"},{component:"Proxy",min:0,max:0,scaling:"No Data",efficiency:"Unknown"},{component:"Total",min:0,max:0,scaling:"No Data",efficiency:"Unknown"}];const v=n.map(g=>g.gateway),_=n.map(g=>g.proxy),w=n.map(g=>g.total);return[{component:"Gateway",min:Math.min(...v),max:Math.max(...v),scaling:u(n.map(g=>g.routes),v),efficiency:l(n.map(g=>g.routes),v)},{component:"Proxy",min:Math.min(..._),max:Math.max(..._),scaling:u(n.map(g=>g.routes),_),efficiency:l(n.map(g=>g.routes),_)},{component:"Total",min:Math.min(...w),max:Math.max(...w),scaling:u(n.map(g=>g.routes),w),efficiency:l(n.map(g=>g.routes),w)}]},u=(v,_)=>{if(v.length<3)return"Insufficient Data";const w=v.length,g=v.reduce((H,F)=>H+F,0),y=_.reduce((H,F)=>H+F,0),b=v.reduce((H,F,V)=>H+F*_[V],0),O=v.reduce((H,F)=>H+F*F,0),C=_.reduce((H,F)=>H+F*F,0),k=w*b-g*y,P=Math.sqrt((w*O-g*g)*(w*C-y*y)),A=P===0?0:k/P,T=A*A,q=[];for(let H=1;H<_.length;H++)q.push(_[H]-_[H-1]);const j=q.reduce((H,F)=>H+F,0)/q.length,B=q.reduce((H,F)=>H+Math.pow(F-j,2),0)/q.length,$=Math.sqrt(B),M=j===0?0:Math.abs($/j);return T>.95?"Highly Linear":T>.85?"Linear":M>1.5?"Step-wise":T>.7?"Moderately Linear":"Variable"},l=(v,_)=>{if(v.length<2)return"Unknown";const w=v.map((P,A)=>_[A]/P),g=w[0],y=w[w.length-1],b=(g-y)/g,O=w.reduce((P,A)=>P+A,0)/w.length,C=w.reduce((P,A)=>P+Math.pow(A-O,2),0)/w.length,k=Math.sqrt(C)/O;return b>.3?"Excellent":b>.1||k<.2?"Good":k<.4?"Moderate":"Variable"},c=i(),m={gateway:{label:"Gateway",color:"#a855f7"},proxy:{label:"Proxy",color:"#4f46e5"},gatewayMean:{label:"Gateway Mean",color:"#8b5cf6"},gatewayMax:{label:"Gateway Peak",color:"#c084fc"},proxyMean:{label:"Proxy Mean",color:"#6366f1"},proxyMax:{label:"Proxy Peak",color:"#818cf8"}},d=(()=>{if(n.length===0||r.length===0||a.length===0)return{gatewayMemoryRange:"0-0MB",proxyMemoryRange:"0-0MB",peakGatewayMeanCPU:0,memoryPerRouteAtScale:0};const v=n.map(A=>A.gateway),_=n.map(A=>A.proxy),w=Math.min(...v),g=Math.max(...v),y=Math.min(..._),b=Math.max(..._),O=r.map(A=>A.gatewayMean),C=O.length>0?Math.max(...O):0,k=a[a.length-1],P=(k==null?void 0:k.totalPerRoute)||0;return{gatewayMemoryRange:`${w}-${g}MB`,proxyMemoryRange:`${y}-${b}MB`,peakGatewayMeanCPU:Math.round(C),memoryPerRouteAtScale:P}})();return E.jsxs("div",{className:"space-y-6",children:[E.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 xl:grid-cols-4 gap-4",children:[E.jsxs(Ke,{children:[E.jsxs(Ze,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[E.jsx(Xe,{className:"text-sm font-medium",children:"Gateway Memory"}),E.jsx(uO,{className:"h-4 w-4 text-muted-foreground"})]}),E.jsxs(Ye,{children:[E.jsx("div",{className:"text-2xl font-bold",children:d.gatewayMemoryRange}),E.jsx("p",{className:"text-xs text-muted-foreground",children:"Linear scaling pattern"})]})]}),E.jsxs(Ke,{children:[E.jsxs(Ze,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[E.jsx(Xe,{className:"text-sm font-medium",children:"Proxy Memory"}),E.jsx(pO,{className:"h-4 w-4 text-muted-foreground"})]}),E.jsxs(Ye,{children:[E.jsx("div",{className:"text-2xl font-bold",children:d.proxyMemoryRange}),E.jsx("p",{className:"text-xs text-muted-foreground",children:"Efficient step-wise scaling"})]})]}),E.jsxs(Ke,{children:[E.jsxs(Ze,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[E.jsx(Xe,{className:"text-sm font-medium",children:"Peak Gateway Mean CPU"}),E.jsx(Yj,{className:"h-4 w-4 text-muted-foreground"})]}),E.jsxs(Ye,{children:[E.jsxs("div",{className:"text-2xl font-bold",children:[d.peakGatewayMeanCPU,"%"]}),E.jsx("p",{className:"text-xs text-muted-foreground",children:"Highest average Gateway CPU usage"})]})]}),E.jsxs(Ke,{children:[E.jsxs(Ze,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:[E.jsx(Xe,{className:"text-sm font-medium",children:"Efficiency"}),E.jsx(mO,{className:"h-4 w-4 text-muted-foreground"})]}),E.jsxs(Ye,{children:[E.jsxs("div",{className:"text-2xl font-bold",children:[d.memoryPerRouteAtScale.toFixed(2),"MB"]}),E.jsx("p",{className:"text-xs text-muted-foreground",children:"Memory per route at scale"})]})]})]}),E.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[E.jsxs(Ke,{children:[E.jsxs(Ze,{children:[E.jsx(Xe,{children:"Memory Scaling"}),E.jsx(jn,{children:"How Gateway and Proxy memory usage grows with route count"})]}),E.jsx(Ye,{children:n&&n.length>0?E.jsxs("div",{className:"relative",children:[E.jsx(jr,{}),E.jsx(fr,{config:m,children:E.jsxs(V1,{data:n,children:[E.jsx(dr,{strokeDasharray:"3 3"}),E.jsx(sn,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),E.jsx(Vt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:v=>`${v}MB`}),E.jsx(qr,{content:E.jsx(vr,{labelFormatter:v=>`${v} routes`})}),E.jsx(Kt,{dataKey:"gateway",type:"monotone",fill:"#a855f7",fillOpacity:.4,stroke:"#a855f7",strokeWidth:2}),E.jsx(Kt,{dataKey:"proxy",type:"monotone",fill:"#4f46e5",fillOpacity:.4,stroke:"#4f46e5",strokeWidth:2})]})})]}):E.jsx(hr,{})})]}),E.jsxs(Ke,{children:[E.jsxs(Ze,{children:[E.jsx(Xe,{children:"Gateway CPU Usage Patterns"}),E.jsx(jn,{children:"Gateway mean vs peak CPU usage. Shows how Gateway CPU usage is affected by scaling up routes."})]}),E.jsx(Ye,{children:r&&r.length>0?E.jsxs("div",{className:"relative",children:[E.jsx(jr,{}),E.jsx(fr,{config:m,children:E.jsxs(hJ,{data:r,children:[E.jsx(dr,{strokeDasharray:"3 3"}),E.jsx(sn,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),E.jsx(Vt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:v=>`${v}%`}),E.jsx(qr,{content:E.jsx(vr,{labelFormatter:v=>`${v} routes`})}),E.jsx(Kt,{dataKey:"gatewayMax",type:"monotone",fill:"#c084fc",fillOpacity:.1,stroke:"#c084fc",strokeWidth:1,strokeDasharray:"2 2"}),E.jsx(xn,{dataKey:"gatewayMean",type:"monotone",stroke:"#8b5cf6",strokeWidth:3,dot:{fill:"#8b5cf6",strokeWidth:2,r:4}})]})})]}):E.jsx(hr,{})})]})]}),E.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[E.jsxs(Ke,{children:[E.jsxs(Ze,{children:[E.jsx(Xe,{children:"Memory Efficiency"}),E.jsx(jn,{children:"Memory usage per route shows how efficiently memory scales with route count"})]}),E.jsx(Ye,{children:a&&a.length>0?E.jsxs("div",{className:"relative",children:[E.jsx(jr,{}),E.jsx(fr,{config:m,children:E.jsxs(th,{data:a,children:[E.jsx(dr,{strokeDasharray:"3 3"}),E.jsx(sn,{dataKey:"routes",type:"number",scale:"linear",domain:[0,1100],ticks:[10,50,100,300,500,1e3],tickLine:!1,axisLine:!1,tickMargin:8}),E.jsx(Vt,{tickLine:!1,axisLine:!1,tickMargin:8,tickFormatter:v=>`${v}MB`}),E.jsx(qr,{content:E.jsx(vr,{formatter:(v,_)=>[`${v}MB per route`,_==="gatewayPerRoute"?"Gateway":_==="proxyPerRoute"?"Proxy":"Total"],labelFormatter:v=>`${v} routes`})}),E.jsx(xn,{dataKey:"totalPerRoute",type:"monotone",stroke:"#8b5cf6",strokeWidth:3,dot:{fill:"#8b5cf6",strokeWidth:2,r:4}}),E.jsx(xn,{dataKey:"gatewayPerRoute",type:"monotone",stroke:"#a855f7",strokeWidth:2,strokeDasharray:"5 5",dot:{fill:"#a855f7",strokeWidth:2,r:3}}),E.jsx(xn,{dataKey:"proxyPerRoute",type:"monotone",stroke:"#4f46e5",strokeWidth:2,strokeDasharray:"3 3",dot:{fill:"#4f46e5",strokeWidth:2,r:3}})]})})]}):E.jsx(hr,{})})]}),E.jsxs(Ke,{children:[E.jsxs(Ze,{children:[E.jsx(Xe,{children:"Memory Scaling Summary"}),E.jsx(jn,{children:"Memory usage characteristics and scaling patterns across different components"})]}),E.jsx(Ye,{children:E.jsx("div",{className:"space-y-4",children:c.map((v,_)=>E.jsxs("div",{className:"flex items-center justify-between p-3 bg-muted/30 rounded-lg",children:[E.jsxs("div",{className:"space-y-1",children:[E.jsx("p",{className:"font-medium",children:v.component}),E.jsxs("div",{className:"flex space-x-4 text-sm text-muted-foreground",children:[E.jsxs("span",{children:["Range: ",v.min,"-",v.max,"MB"]}),E.jsxs("span",{children:["Pattern: ",v.scaling]})]})]}),E.jsxs("div",{className:"flex items-center space-x-2",children:[E.jsx(iO,{className:"h-4 w-4 text-green-600"}),E.jsx("span",{className:"text-sm font-medium text-green-700",children:v.efficiency})]})]},_))})})]})]})]})};var X9=!1;function OJ(){const[e,t]=R.useState(X9);return R.useEffect(()=>{X9||(X9=!0,t(!0))},[]),e}var FA=js[" useSyncExternalStore ".trim().toString()];function kJ(){return()=>{}}function CJ(){return FA(kJ,()=>!0,()=>!1)}var AJ=typeof FA=="function"?CJ:OJ,EJ=Object.defineProperty,ii=(e,t)=>EJ(e,"name",{value:t,configurable:!0}),Y9="rovingFocusGroup.onEntryFocus",RJ={bubbles:!1,cancelable:!0},G0="RovingFocusGroup",[Rv,BA,TJ]=eP(G0),[NJ,zA]=Is(G0,[TJ]),[qJ,jJ]=NJ(G0),MJ=R.forwardRef(ii(function(t,n){return E.jsx(Rv.Provider,{scope:t.__scopeRovingFocusGroup,children:E.jsx(Rv.Slot,{scope:t.__scopeRovingFocusGroup,children:E.jsx(IJ,{...t,ref:n})})})},"RovingFocusGroup")),IJ=R.forwardRef(ii(function(t,n){const{__scopeRovingFocusGroup:r,orientation:a,loop:i=!1,dir:u,currentTabStopId:l,defaultCurrentTabStopId:c,onCurrentTabStopIdChange:m,onEntryFocus:f,preventScrollOnEntryFocus:d=!1,...v}=t,_=R.useRef(null),w=Nt(n,_),g=Dv(u),[y,b]=sl({prop:l,defaultProp:c??null,onChange:m,caller:G0}),[O,C]=R.useState(!1),k=$r(f),P=BA(r),A=R.useRef(!1),[T,q]=R.useState(0);return R.useEffect(()=>{const j=_.current;if(j)return j.addEventListener(Y9,k),()=>j.removeEventListener(Y9,k)},[k]),E.jsx(qJ,{scope:r,orientation:a,dir:g,loop:i,currentTabStopId:y,onItemFocus:R.useCallback(j=>b(j),[b]),onItemShiftTab:R.useCallback(()=>C(!0),[]),onFocusableItemAdd:R.useCallback(()=>q(j=>j+1),[]),onFocusableItemRemove:R.useCallback(()=>q(j=>j-1),[]),children:E.jsx(mt.div,{tabIndex:O||T===0?-1:0,"data-orientation":a,...v,ref:w,style:{outline:"none",...t.style},onMouseDown:Ve(t.onMouseDown,()=>{A.current=!0}),onFocus:Ve(t.onFocus,j=>{const B=!A.current;if(j.target===j.currentTarget&&B&&!O){const $=new CustomEvent(Y9,RJ);if(j.currentTarget.dispatchEvent($),!$.defaultPrevented){const M=P().filter(J=>J.focusable),H=M.find(J=>J.active),F=M.find(J=>J.id===y),K=[H,F,...M].filter(Boolean).map(J=>J.ref.current);nh(K,d)}}A.current=!1}),onBlur:Ve(t.onBlur,()=>C(!1))})})},"RovingFocusGroupImpl")),DJ="RovingFocusGroupItem",$J=R.forwardRef(ii(function(t,n){const{__scopeRovingFocusGroup:r,focusable:a=!0,active:i=!1,tabStopId:u,children:l,...c}=t,m=X1(),f=u||m,d=jJ(DJ,r),v=d.currentTabStopId===f,_=BA(r),{onFocusableItemAdd:w,onFocusableItemRemove:g,currentTabStopId:y}=d,b=AJ();return Pt(()=>{if(!(!b||!a))return w(),()=>g()},[b,a,w,g]),R.useEffect(()=>{if(!(b||!a))return w(),()=>g()},[b,a,w,g]),E.jsx(Rv.ItemSlot,{scope:r,id:f,focusable:a,active:i,children:E.jsx(mt.span,{tabIndex:v?0:-1,"data-orientation":d.orientation,...c,ref:n,onMouseDown:Ve(t.onMouseDown,O=>{a?d.onItemFocus(f):O.preventDefault()}),onFocus:Ve(t.onFocus,()=>d.onItemFocus(f)),onKeyDown:Ve(t.onKeyDown,O=>{if(O.key==="Tab"&&O.shiftKey){d.onItemShiftTab();return}if(O.target!==O.currentTarget)return;const C=WA(O,d.orientation,d.dir);if(C!==void 0){if(O.metaKey||O.ctrlKey||O.altKey||O.shiftKey)return;O.preventDefault();let P=_().filter(A=>A.focusable).map(A=>A.ref.current);if(C==="last")P.reverse();else if(C==="prev"||C==="next"){C==="prev"&&P.reverse();const A=P.indexOf(O.currentTarget);P=d.loop?VA(P,A+1):P.slice(A+1)}setTimeout(()=>nh(P))}}),children:typeof l=="function"?l({isCurrentTabStop:v,hasTabStop:y!=null}):l})})},"RovingFocusGroupItem")),LJ={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function UA(e,t){return t!=="rtl"?e:e==="ArrowLeft"?"ArrowRight":e==="ArrowRight"?"ArrowLeft":e}ii(UA,"getDirectionAwareKey");function WA(e,t,n){const r=UA(e.key,n);if(!(t==="vertical"&&["ArrowLeft","ArrowRight"].includes(r))&&!(t==="horizontal"&&["ArrowUp","ArrowDown"].includes(r)))return LJ[r]}ii(WA,"getFocusIntent");function nh(e,t=!1){const n=document.activeElement;for(const r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}ii(nh,"focusFirst");function VA(e,t){return e.map((n,r)=>e[(t+r)%e.length])}ii(VA,"wrapArray");var HJ=MJ,GJ=$J,FJ=Object.defineProperty,Xs=(e,t)=>FJ(e,"name",{value:t,configurable:!0}),rh="Tabs",[BJ]=Is(rh,[zA]),KA=zA(),[zJ,ah]=BJ(rh),UJ=R.forwardRef(Xs(function(t,n){const{__scopeTabs:r,value:a,onValueChange:i,defaultValue:u,orientation:l="horizontal",dir:c,activationMode:m="automatic",...f}=t,d=Dv(c),[v,_]=sl({prop:a,onChange:i,defaultProp:u??"",caller:rh});return E.jsx(zJ,{scope:r,baseId:X1(),value:v,onValueChange:_,orientation:l,dir:d,activationMode:m,children:E.jsx(mt.div,{dir:d,"data-orientation":l,...f,ref:n})})},"Tabs")),WJ="TabsList",VJ=R.forwardRef(Xs(function(t,n){const{__scopeTabs:r,loop:a=!0,...i}=t,u=ah(WJ,r),l=KA(r);return E.jsx(HJ,{asChild:!0,...l,orientation:u.orientation,dir:u.dir,loop:a,children:E.jsx(mt.div,{role:"tablist","aria-orientation":u.orientation,...i,ref:n})})},"TabsList")),KJ="TabsTrigger",XJ=R.forwardRef(Xs(function(t,n){const{__scopeTabs:r,value:a,disabled:i=!1,...u}=t,l=ah(KJ,r),c=KA(r),m=oh(l.baseId,a),f=ih(l.baseId,a),d=a===l.value;return E.jsx(GJ,{asChild:!0,...c,focusable:!i,active:d,children:E.jsx(mt.button,{type:"button",role:"tab","aria-selected":d,"aria-controls":f,"data-state":d?"active":"inactive","data-disabled":i?"":void 0,disabled:i,id:m,...u,ref:n,onMouseDown:Ve(t.onMouseDown,v=>{!i&&v.button===0&&v.ctrlKey===!1?l.onValueChange(a):v.preventDefault()}),onKeyDown:Ve(t.onKeyDown,v=>{i||v.target!==v.currentTarget||[" ","Enter"].includes(v.key)&&l.onValueChange(a)}),onFocus:Ve(t.onFocus,()=>{const v=l.activationMode!=="manual";!d&&!i&&v&&l.onValueChange(a)})})})},"TabsTrigger")),YJ="TabsContent",QJ=R.forwardRef(Xs(function(t,n){const{__scopeTabs:r,value:a,forceMount:i,children:u,...l}=t,c=ah(YJ,r),m=oh(c.baseId,a),f=ih(c.baseId,a),d=a===c.value,v=R.useRef(d);return R.useEffect(()=>{const _=requestAnimationFrame(()=>v.current=!1);return()=>cancelAnimationFrame(_)},[]),E.jsx(Wv,{present:i||d,children:({present:_})=>E.jsx(mt.div,{"data-state":d?"active":"inactive","data-orientation":c.orientation,role:"tabpanel","aria-labelledby":m,hidden:!_,id:f,tabIndex:0,...l,ref:n,style:{...t.style,animationDuration:v.current?"0s":void 0},children:_&&u})})},"TabsContent"));function oh(e,t){return`${e}-trigger-${t}`}Xs(oh,"makeTriggerId");function ih(e,t){return`${e}-content-${t}`}Xs(ih,"makeContentId");var ZJ=UJ,XA=VJ,YA=XJ,QA=QJ;const JJ=ZJ,ZA=R.forwardRef(({className:e,...t},n)=>E.jsx(XA,{ref:n,className:Je("inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground",e),...t}));ZA.displayName=XA.displayName;const Hp=R.forwardRef(({className:e,...t},n)=>E.jsx(YA,{ref:n,className:Je("inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",e),...t}));Hp.displayName=YA.displayName;const Gp=R.forwardRef(({className:e,...t},n)=>E.jsx(QA,{ref:n,className:Je("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",e),...t}));Gp.displayName=QA.displayName;const eee={metadata:{version:"1.7.1",runId:"1.7.1-release-2026-03-12",date:"2026-03-12T17:15:44Z",environment:"GitHub Release",description:"Benchmark results for version 1.7.1 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.7.1/benchmark_report.zip",testConfiguration:{rps:100,connections:100,duration:90,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:404.46067415730334,totalRequests:35997,latency:{max:21.831679,min:.36027200000000004,mean:.50792,pstdev:.327603,percentiles:{p50:.47825500000000004,p75:.494671,p80:.500831,p90:.524479,p95:.565567,p99:1.174719,p999:4.073215}},resources:{envoyGateway:{memory:{max:141.2109375,min:126.21484375,mean:134.95377604166666},cpu:{max:1.2666666666666664,min:.3999999999999996,mean:.6333333333333335}},envoyProxy:{memory:{max:23.01953125,min:6.2890625,mean:21.337369791666667},cpu:{max:10.880065789473683,min:6.7053471008693455,mean:9.803489410005396}}},poolOverflow:3,upstreamConnections:9,counters:{"benchmark.http_2xx":{value:35997,perSecond:404.46067415730334},"benchmark.pool_overflow":{value:3,perSecond:.033707865168539325},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:9,perSecond:.10112359550561797},upstream_cx_rx_bytes_total:{value:5651529,perSecond:63500.32584269663},upstream_cx_total:{value:9,perSecond:.10112359550561797},upstream_cx_tx_bytes_total:{value:1619865,perSecond:18200.73033707865},upstream_rq_pending_overflow:{value:3,perSecond:.033707865168539325},upstream_rq_pending_total:{value:9,perSecond:.10112359550561797},upstream_rq_total:{value:35997,perSecond:404.46067415730334}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1199.7777777777778,totalRequests:107980,latency:{max:33.160191,min:.350496,mean:.502856,pstdev:.381932,percentiles:{p50:.46670300000000003,p75:.48307100000000003,p80:.488031,p90:.509791,p95:.563007,p99:1.395775,p999:4.814335}},resources:{envoyGateway:{memory:{max:147.07421875,min:133.85546875,mean:142.88971354166668},cpu:{max:2.066666666666667,min:.46666666666666556,mean:.8288888888888886}},envoyProxy:{memory:{max:29.1484375,min:26.9921875,mean:28.961067708333335},cpu:{max:31.337084666860616,min:16.902799943566244,mean:27.581361126197127}}},poolOverflow:20,upstreamConnections:28,counters:{"benchmark.http_2xx":{value:107980,perSecond:1199.7777777777778},"benchmark.pool_overflow":{value:20,perSecond:.2222222222222222},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:28,perSecond:.3111111111111111},upstream_cx_rx_bytes_total:{value:16952860,perSecond:188365.11111111112},upstream_cx_total:{value:28,perSecond:.3111111111111111},upstream_cx_tx_bytes_total:{value:4859100,perSecond:53990},upstream_rq_pending_overflow:{value:20,perSecond:.2222222222222222},upstream_rq_pending_total:{value:28,perSecond:.3111111111111111},upstream_rq_total:{value:107980,perSecond:1199.7777777777778}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:2020.8988764044943,totalRequests:179860,latency:{max:159.686655,min:.34865599999999997,mean:.555528,pstdev:.899074,percentiles:{p50:.465487,p75:.49182299999999995,p80:.499215,p90:.559263,p95:.823231,p99:2.489599,p999:9.310207}},resources:{envoyGateway:{memory:{max:148.53125,min:141.1015625,mean:146.11067708333334},cpu:{max:2.666666666666666,min:.5333333333333339,mean:1.0111111111111104}},envoyProxy:{memory:{max:35.53515625,min:33.25390625,mean:35.204166666666666},cpu:{max:50.98887138280554,min:28.235218195210045,mean:46.107534023712816}}},poolOverflow:140,upstreamConnections:53,counters:{"benchmark.http_2xx":{value:179860,perSecond:2020.8988764044943},"benchmark.pool_overflow":{value:140,perSecond:1.5730337078651686},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:53,perSecond:.5955056179775281},upstream_cx_rx_bytes_total:{value:28238020,perSecond:317281.1235955056},upstream_cx_total:{value:53,perSecond:.5955056179775281},upstream_cx_tx_bytes_total:{value:8093700,perSecond:90940.44943820225},upstream_rq_pending_overflow:{value:140,perSecond:1.5730337078651686},upstream_rq_pending_total:{value:53,perSecond:.5955056179775281},upstream_rq_total:{value:179860,perSecond:2020.8988764044943}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3199.5333333333333,totalRequests:287958,latency:{max:195.354623,min:.340448,mean:2.3120990000000003,pstdev:9.991765999999998,percentiles:{p50:.643839,p75:.961279,p80:1.1813749999999998,p90:2.493439,p95:4.838911,p99:56.819711,p999:139.632639}},resources:{envoyGateway:{memory:{max:155.48828125,min:145.59765625,mean:151.63020833333334},cpu:{max:5.266666666666662,min:.86666666666666,mean:1.6333333333333317}},envoyProxy:{memory:{max:70.109375,min:57.375,mean:62.9921875},cpu:{max:73.13433104940499,min:72.0589681943401,mean:72.51389466052387}}},poolOverflow:40,upstreamConnections:360,counters:{"benchmark.http_2xx":{value:287958,perSecond:3199.5333333333333},"benchmark.pool_overflow":{value:40,perSecond:.4444444444444444},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:360,perSecond:4},upstream_cx_rx_bytes_total:{value:45209406,perSecond:502326.73333333334},upstream_cx_total:{value:360,perSecond:4},upstream_cx_tx_bytes_total:{value:12958200,perSecond:143980},upstream_rq_pending_overflow:{value:40,perSecond:.4444444444444444},upstream_rq_pending_total:{value:360,perSecond:4},upstream_rq_total:{value:287960,perSecond:3199.5555555555557}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3999.788888888889,totalRequests:359981,latency:{max:1183.7767669999998,min:.348768,mean:8.674752000000002,pstdev:30.238035,percentiles:{p50:1.351807,p75:3.699583,p80:5.259263,p90:16.358911,p95:57.106431,p99:116.441087,p999:181.805055}},resources:{envoyGateway:{memory:{max:167.328125,min:162.40625,mean:165.52278645833334},cpu:{max:7.1999999999999895,min:.9999999999999905,mean:2.0555318550119233}},envoyProxy:{memory:{max:94.5546875,min:84.5390625,mean:90.65416666666667},cpu:{max:85.74224964628205,min:85.12550198150596,mean:85.30171560001341}}},poolOverflow:15,upstreamConnections:385,counters:{"benchmark.http_2xx":{value:359981,perSecond:3999.788888888889},"benchmark.pool_overflow":{value:15,perSecond:.16666666666666666},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:385,perSecond:4.277777777777778},upstream_cx_rx_bytes_total:{value:56517017,perSecond:627966.8555555556},upstream_cx_total:{value:385,perSecond:4.277777777777778},upstream_cx_tx_bytes_total:{value:16199325,perSecond:179992.5},upstream_rq_pending_overflow:{value:15,perSecond:.16666666666666666},upstream_rq_pending_total:{value:385,perSecond:4.277777777777778},upstream_rq_total:{value:359985,perSecond:3999.8333333333335}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:4313.4157303370785,totalRequests:383894,latency:{max:2317.615103,min:2.001856,mean:80.580335,pstdev:34.233291,percentiles:{p50:78.331903,p75:91.250687,p80:93.556735,p90:99.053567,p95:106.225663,p99:156.770303,p999:198.262783}},resources:{envoyGateway:{memory:{max:189.859375,min:177.27734375,mean:184.05078125},cpu:{max:14.133333333333365,min:.8666666666667312,mean:3.2955555555555662}},envoyProxy:{memory:{max:146.84375,min:137.078125,mean:144.76744791666667},cpu:{max:99.10046568276267,min:56.52672818023091,mean:88.91415783040362}}},poolOverflow:54,upstreamConnections:346,counters:{"benchmark.http_2xx":{value:383894,perSecond:4313.4157303370785},"benchmark.pool_overflow":{value:54,perSecond:.6067415730337079},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:346,perSecond:3.8876404494382024},upstream_cx_rx_bytes_total:{value:60271358,perSecond:677206.2696629213},upstream_cx_total:{value:346,perSecond:3.8876404494382024},upstream_cx_tx_bytes_total:{value:17290800,perSecond:194278.65168539327},upstream_rq_pending_overflow:{value:54,perSecond:.6067415730337079},upstream_rq_pending_total:{value:346,perSecond:3.8876404494382024},upstream_rq_total:{value:384240,perSecond:4317.303370786517}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3998.7,totalRequests:359883,latency:{max:576.323583,min:.337072,mean:6.515112,pstdev:17.650902,percentiles:{p50:1.259839,p75:3.451263,p80:4.744959,p90:13.520383,p95:35.483647,p99:96.186367,p999:157.630463}},resources:{envoyGateway:{memory:{max:182.9140625,min:171.34375,mean:175.60807291666666},cpu:{max:1.466666666666659,min:.933333333333337,mean:1.1466666666666656}},envoyProxy:{memory:{max:146.94140625,min:144.984375,mean:145.9390625},cpu:{max:86.54882356499097,min:60.09245426968198,mean:80.62355319860941}}},poolOverflow:95,upstreamConnections:305,counters:{"benchmark.http_2xx":{value:359883,perSecond:3998.7},"benchmark.pool_overflow":{value:95,perSecond:1.0555555555555556},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:305,perSecond:3.388888888888889},upstream_cx_rx_bytes_total:{value:56501631,perSecond:627795.9},upstream_cx_total:{value:305,perSecond:3.388888888888889},upstream_cx_tx_bytes_total:{value:16195725,perSecond:179952.5},upstream_rq_pending_overflow:{value:95,perSecond:1.0555555555555556},upstream_rq_pending_total:{value:305,perSecond:3.388888888888889},upstream_rq_total:{value:359905,perSecond:3998.9444444444443}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3199.266666666667,totalRequests:287934,latency:{max:292.716543,min:.32511999999999996,mean:2.174077,pstdev:8.738519,percentiles:{p50:.648095,p75:1.035167,p80:1.354623,p90:2.638975,p95:5.187583,p99:44.509183,p999:99.930111}},resources:{envoyGateway:{memory:{max:172.57421875,min:157.23046875,mean:163.800390625},cpu:{max:1.2000000000000455,min:1.066666666666644,mean:1.1333340751525947}},envoyProxy:{memory:{max:145.29296875,min:141.73828125,mean:142.549609375},cpu:{max:73.15572640218886,min:44.218809476424916,mean:65.55157206751501}}},poolOverflow:61,upstreamConnections:339,counters:{"benchmark.http_2xx":{value:287934,perSecond:3199.266666666667},"benchmark.pool_overflow":{value:61,perSecond:.6777777777777778},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:339,perSecond:3.7666666666666666},upstream_cx_rx_bytes_total:{value:45205638,perSecond:502284.86666666664},upstream_cx_total:{value:339,perSecond:3.7666666666666666},upstream_cx_tx_bytes_total:{value:12957255,perSecond:143969.5},upstream_rq_pending_overflow:{value:61,perSecond:.6777777777777778},upstream_rq_pending_total:{value:339,perSecond:3.7666666666666666},upstream_rq_total:{value:287939,perSecond:3199.322222222222}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:1999.0222222222221,totalRequests:179912,latency:{max:66.826239,min:.358272,mean:.551723,pstdev:.927127,percentiles:{p50:.468031,p75:.487647,p80:.49355099999999996,p90:.531871,p95:.759775,p99:2.020607,p999:11.134975}},resources:{envoyGateway:{memory:{max:161.9765625,min:149.421875,mean:152.75846354166666},cpu:{max:1.2000000000000455,min:1.066666666666644,mean:1.099999999999994}},envoyProxy:{memory:{max:141.02734375,min:138.734375,mean:139.32994791666667},cpu:{max:51.284291616457324,min:32.19114984765026,mean:47.86547970682163}}},poolOverflow:88,upstreamConnections:60,counters:{"benchmark.http_2xx":{value:179912,perSecond:1999.0222222222221},"benchmark.pool_overflow":{value:88,perSecond:.9777777777777777},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:60,perSecond:.6666666666666666},upstream_cx_rx_bytes_total:{value:28246184,perSecond:313846.4888888889},upstream_cx_total:{value:60,perSecond:.6666666666666666},upstream_cx_tx_bytes_total:{value:8096040,perSecond:89956},upstream_rq_pending_overflow:{value:88,perSecond:.9777777777777777},upstream_rq_pending_total:{value:60,perSecond:.6666666666666666},upstream_rq_total:{value:179912,perSecond:1999.0222222222221}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1212.6404494382023,totalRequests:107925,latency:{max:65.267711,min:.353296,mean:.527068,pstdev:.932132,percentiles:{p50:.46964700000000004,p75:.486287,p80:.490863,p90:.5107510000000001,p95:.5663349999999999,p99:1.548991,p999:9.021439}},resources:{envoyGateway:{memory:{max:152.046875,min:148.2265625,mean:149.540625},cpu:{max:1.1999999999999507,min:1.0000000000000377,mean:1.0757575757575657}},envoyProxy:{memory:{max:138.80859375,min:138.703125,mean:138.75911458333334},cpu:{max:31.886488894168092,min:19.332278206834392,mean:27.251537958002597}}},poolOverflow:75,upstreamConnections:40,counters:{"benchmark.http_2xx":{value:107925,perSecond:1212.6404494382023},"benchmark.pool_overflow":{value:75,perSecond:.8426966292134831},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:40,perSecond:.449438202247191},upstream_cx_rx_bytes_total:{value:16944225,perSecond:190384.55056179775},upstream_cx_total:{value:40,perSecond:.449438202247191},upstream_cx_tx_bytes_total:{value:4856625,perSecond:54568.8202247191},upstream_rq_pending_overflow:{value:75,perSecond:.8426966292134831},upstream_rq_pending_total:{value:40,perSecond:.449438202247191},upstream_rq_total:{value:107925,perSecond:1212.6404494382023}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:404.39325842696627,totalRequests:35991,latency:{max:52.789246999999996,min:.379296,mean:.535933,pstdev:.861002,percentiles:{p50:.480127,p75:.499503,p80:.506415,p90:.534079,p95:.5791029999999999,p99:1.305727,p999:8.827391}},resources:{envoyGateway:{memory:{max:151.6875,min:142.6875,mean:146.77421875},cpu:{max:1.2000000000000455,min:1.0000000000000377,mean:1.0833333333333348}},envoyProxy:{memory:{max:138.79296875,min:138.6875,mean:138.7109375},cpu:{max:10.990164787510622,min:6.4548566601374775,mean:9.83564108772025}}},poolOverflow:9,upstreamConnections:15,counters:{"benchmark.http_2xx":{value:35991,perSecond:404.39325842696627},"benchmark.pool_overflow":{value:9,perSecond:.10112359550561797},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:15,perSecond:.16853932584269662},upstream_cx_rx_bytes_total:{value:5650587,perSecond:63489.74157303371},upstream_cx_total:{value:15,perSecond:.16853932584269662},upstream_cx_tx_bytes_total:{value:1619595,perSecond:18197.696629213482},upstream_rq_pending_overflow:{value:9,perSecond:.10112359550561797},upstream_rq_pending_total:{value:15,perSecond:.16853932584269662},upstream_rq_total:{value:35991,perSecond:404.39325842696627}}}]},tee={metadata:{version:"1.7.0",runId:"1.7.0-release-2026-02-05",date:"2026-02-05T22:23:47Z",environment:"GitHub Release",description:"Benchmark results for version 1.7.0 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.7.0/benchmark_report.zip",testConfiguration:{rps:100,connections:100,duration:90,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:404.4943820224719,totalRequests:36e3,latency:{max:20.996095,min:.29254399999999997,mean:.392865,pstdev:.234214,percentiles:{p50:.376687,p75:.391071,p80:.396143,p90:.41241500000000003,p95:.435103,p99:.815903,p999:3.045503}},resources:{envoyGateway:{memory:{max:138.95703125,min:116.44921875,mean:132.88359375},cpu:{max:1.1333333333333337,min:.26666666666666694,mean:.5023809523809526}},envoyProxy:{memory:{max:22.7890625,min:6.25,mean:21.124088541666666},cpu:{max:8.392692429188166,min:8.392692429188166,mean:8.392692429188166}}},poolOverflow:0,upstreamConnections:8,counters:{"benchmark.http_2xx":{value:36e3,perSecond:404.4943820224719},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:8,perSecond:.0898876404494382},upstream_cx_rx_bytes_total:{value:5652e3,perSecond:63505.61797752809},upstream_cx_total:{value:8,perSecond:.0898876404494382},upstream_cx_tx_bytes_total:{value:162e4,perSecond:18202.247191011236},upstream_rq_pending_total:{value:8,perSecond:.0898876404494382},upstream_rq_total:{value:36e3,perSecond:404.4943820224719}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1213.0449438202247,totalRequests:107961,latency:{max:76.619775,min:.260456,mean:.38059699999999996,pstdev:.742124,percentiles:{p50:.35684699999999997,p75:.369695,p80:.37345500000000004,p90:.386127,p95:.407487,p99:.741503,p999:3.233663}},resources:{envoyGateway:{memory:{max:141.91015625,min:132.375,mean:139.46731770833333},cpu:{max:1.9333333333333333,min:.33333333333333215,mean:.7222222222222222}},envoyProxy:{memory:{max:28.9453125,min:26.76953125,mean:28.652213541666665},cpu:{max:24.348176941615478,min:16.925555708766215,mean:22.918668536759185}}},poolOverflow:39,upstreamConnections:34,counters:{"benchmark.http_2xx":{value:107961,perSecond:1213.0449438202247},"benchmark.pool_overflow":{value:39,perSecond:.43820224719101125},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:34,perSecond:.38202247191011235},upstream_cx_rx_bytes_total:{value:16949877,perSecond:190448.05617977527},upstream_cx_total:{value:34,perSecond:.38202247191011235},upstream_cx_tx_bytes_total:{value:4858245,perSecond:54587.02247191011},upstream_rq_pending_overflow:{value:39,perSecond:.43820224719101125},upstream_rq_pending_total:{value:34,perSecond:.38202247191011235},upstream_rq_total:{value:107961,perSecond:1213.0449438202247}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:2021.9775280898875,totalRequests:179956,latency:{max:35.938303,min:.24958400000000003,mean:.360931,pstdev:.352214,percentiles:{p50:.345583,p75:.360431,p80:.363695,p90:.376079,p95:.404991,p99:.8741749999999999,p999:3.010431}},resources:{envoyGateway:{memory:{max:147.76171875,min:140.00390625,mean:143.31015625},cpu:{max:2.4666666666666672,min:.46666666666666556,mean:.862222222222222}},envoyProxy:{memory:{max:35.27734375,min:32.88671875,mean:34.832942708333334},cpu:{max:38.243800513752305,min:36.42319860496981,mean:37.312253068263566}}},poolOverflow:44,upstreamConnections:28,counters:{"benchmark.http_2xx":{value:179956,perSecond:2021.9775280898875},"benchmark.pool_overflow":{value:44,perSecond:.4943820224719101},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:28,perSecond:.3146067415730337},upstream_cx_rx_bytes_total:{value:28253092,perSecond:317450.47191011236},upstream_cx_total:{value:28,perSecond:.3146067415730337},upstream_cx_tx_bytes_total:{value:8098020,perSecond:90988.98876404495},upstream_rq_pending_overflow:{value:44,perSecond:.4943820224719101},upstream_rq_pending_total:{value:28,perSecond:.3146067415730337},upstream_rq_total:{value:179956,perSecond:2021.9775280898875}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3199.5222222222224,totalRequests:287957,latency:{max:69.099519,min:.229736,mean:.562037,pstdev:2.4478809999999998,percentiles:{p50:.33948700000000004,p75:.384655,p80:.43838299999999997,p90:.49603099999999994,p95:.628447,p99:2.546431,p999:44.222463}},resources:{envoyGateway:{memory:{max:156.15234375,min:145.50390625,mean:152.67447916666666},cpu:{max:4.733333333333327,min:.7333333333333295,mean:1.3666666666666663}},envoyProxy:{memory:{max:62.18359375,min:57.375,mean:60.349609375},cpu:{max:57.686706657779716,min:56.90183246073298,mean:57.38613645993947}}},poolOverflow:43,upstreamConnections:177,counters:{"benchmark.http_2xx":{value:287957,perSecond:3199.5222222222224},"benchmark.pool_overflow":{value:43,perSecond:.4777777777777778},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:177,perSecond:1.9666666666666666},upstream_cx_rx_bytes_total:{value:45209249,perSecond:502324.9888888889},upstream_cx_total:{value:177,perSecond:1.9666666666666666},upstream_cx_tx_bytes_total:{value:12958065,perSecond:143978.5},upstream_rq_pending_overflow:{value:43,perSecond:.4777777777777778},upstream_rq_pending_total:{value:177,perSecond:1.9666666666666666},upstream_rq_total:{value:287957,perSecond:3199.5222222222224}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3999.088888888889,totalRequests:359918,latency:{max:153.878527,min:.20744,mean:1.240927,pstdev:6.1772670000000005,percentiles:{p50:.444351,p75:.504159,p80:.537535,p90:.7239030000000001,p95:1.070271,p99:34.512895,p999:76.099583}},resources:{envoyGateway:{memory:{max:165.05078125,min:158.30078125,mean:162.92018229166666},cpu:{max:7.266666666666666,min:.6666666666666762,mean:1.968876744256573}},envoyProxy:{memory:{max:89.16796875,min:79.9453125,mean:85.46458333333334},cpu:{max:64.9697469866435,min:64.3614700614124,mean:64.53535528621765}}},poolOverflow:81,upstreamConnections:314,counters:{"benchmark.http_2xx":{value:359918,perSecond:3999.088888888889},"benchmark.pool_overflow":{value:81,perSecond:.9},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:314,perSecond:3.488888888888889},upstream_cx_rx_bytes_total:{value:56507126,perSecond:627856.9555555555},upstream_cx_total:{value:314,perSecond:3.488888888888889},upstream_cx_tx_bytes_total:{value:16196355,perSecond:179959.5},upstream_rq_pending_overflow:{value:81,perSecond:.9},upstream_rq_pending_total:{value:314,perSecond:3.488888888888889},upstream_rq_total:{value:359919,perSecond:3999.1}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:7998.9,totalRequests:719901,latency:{max:612.2045430000001,min:.224096,mean:10.839886,pstdev:17.041939,percentiles:{p50:2.2106869999999996,p75:16.740863,p80:24.484863,p90:33.835007,p95:39.696383000000004,p99:85.680127,p999:96.747519}},resources:{envoyGateway:{memory:{max:184.7734375,min:168.8125,mean:179.18958333333333},cpu:{max:12.533333333333301,min:.7999999999999354,mean:2.7400000000000064}},envoyProxy:{memory:{max:142.8515625,min:137.015625,mean:141.06419270833334},cpu:{max:99.09098152526053,min:59.47936166053764,mean:90.50754321831067}}},poolOverflow:95,upstreamConnections:305,counters:{"benchmark.http_2xx":{value:719901,perSecond:7998.9},"benchmark.pool_overflow":{value:95,perSecond:1.0555555555555556},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:305,perSecond:3.388888888888889},upstream_cx_rx_bytes_total:{value:113024457,perSecond:12558273e-1},upstream_cx_total:{value:305,perSecond:3.388888888888889},upstream_cx_tx_bytes_total:{value:32395725,perSecond:359952.5},upstream_rq_pending_overflow:{value:95,perSecond:1.0555555555555556},upstream_rq_pending_total:{value:305,perSecond:3.388888888888889},upstream_rq_total:{value:719905,perSecond:7998.944444444444}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3998.9777777777776,totalRequests:359908,latency:{max:96.98918300000001,min:.21712,mean:1.214108,pstdev:5.909787,percentiles:{p50:.446463,p75:.48827099999999996,p80:.5066390000000001,p90:.617279,p95:.841503,p99:35.389439,p999:73.859071}},resources:{envoyGateway:{memory:{max:180.0546875,min:168.95703125,mean:172.00481770833332},cpu:{max:1.000000000000038,min:.8000000000000304,mean:.966666666666674}},envoyProxy:{memory:{max:142.19921875,min:141.73828125,mean:142.04947916666666},cpu:{max:65.55879881534545,min:38.38425750701383,mean:57.566019955372525}}},poolOverflow:92,upstreamConnections:308,counters:{"benchmark.http_2xx":{value:359908,perSecond:3998.9777777777776},"benchmark.pool_overflow":{value:92,perSecond:1.0222222222222221},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:308,perSecond:3.422222222222222},upstream_cx_rx_bytes_total:{value:56505556,perSecond:627839.5111111111},upstream_cx_total:{value:308,perSecond:3.422222222222222},upstream_cx_tx_bytes_total:{value:16195860,perSecond:179954},upstream_rq_pending_overflow:{value:92,perSecond:1.0222222222222221},upstream_rq_pending_total:{value:308,perSecond:3.422222222222222},upstream_rq_total:{value:359908,perSecond:3998.9777777777776}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3199.1111111111113,totalRequests:287920,latency:{max:70.762495,min:.240672,mean:.617723,pstdev:2.804425,percentiles:{p50:.352303,p75:.441039,p80:.450911,p90:.5074390000000001,p95:.623903,p99:2.854783,p999:49.215487}},resources:{envoyGateway:{memory:{max:171.9140625,min:154.85546875,mean:159.69309895833334},cpu:{max:1.0000000000000377,min:.933333333333337,mean:.9472222222222332}},envoyProxy:{memory:{max:142.1953125,min:137.5625,mean:138.707421875},cpu:{max:60.48572130986353,min:34.594808303176436,mean:50.88592625565946}}},poolOverflow:80,upstreamConnections:197,counters:{"benchmark.http_2xx":{value:287920,perSecond:3199.1111111111113},"benchmark.pool_overflow":{value:80,perSecond:.8888888888888888},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:197,perSecond:2.188888888888889},upstream_cx_rx_bytes_total:{value:45203440,perSecond:502260.44444444444},upstream_cx_total:{value:197,perSecond:2.188888888888889},upstream_cx_tx_bytes_total:{value:12956400,perSecond:143960},upstream_rq_pending_overflow:{value:80,perSecond:.8888888888888888},upstream_rq_pending_total:{value:197,perSecond:2.188888888888889},upstream_rq_total:{value:287920,perSecond:3199.1111111111113}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:2022,totalRequests:179958,latency:{max:21.025790999999998,min:.248144,mean:.366898,pstdev:.15592,percentiles:{p50:.355983,p75:.371327,p80:.375567,p90:.38636699999999996,p95:.408463,p99:.794591,p999:2.145023}},resources:{envoyGateway:{memory:{max:163.04296875,min:146.859375,mean:150.65572916666667},cpu:{max:1.000000000000038,min:.933333333333337,mean:.9787878787878627}},envoyProxy:{memory:{max:137.84765625,min:136.77734375,mean:137.0859375},cpu:{max:39.49899838449119,min:39.465970330002804,mean:39.49074137086909}}},poolOverflow:42,upstreamConnections:19,counters:{"benchmark.http_2xx":{value:179958,perSecond:2022},"benchmark.pool_overflow":{value:42,perSecond:.47191011235955055},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:19,perSecond:.21348314606741572},upstream_cx_rx_bytes_total:{value:28253406,perSecond:317454},upstream_cx_total:{value:19,perSecond:.21348314606741572},upstream_cx_tx_bytes_total:{value:8098110,perSecond:90990},upstream_rq_pending_overflow:{value:42,perSecond:.47191011235955055},upstream_rq_pending_total:{value:19,perSecond:.21348314606741572},upstream_rq_total:{value:179958,perSecond:2022}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1213.3033707865168,totalRequests:107984,latency:{max:25.883647,min:.25404,mean:.371704,pstdev:.24943300000000002,percentiles:{p50:.358335,p75:.370575,p80:.373935,p90:.384879,p95:.40491099999999997,p99:.710335,p999:2.654719}},resources:{envoyGateway:{memory:{max:149.109375,min:142.48046875,mean:145.869921875},cpu:{max:1.066666666666644,min:.933333333333337,mean:.9749999999999859}},envoyProxy:{memory:{max:136.78515625,min:136.7421875,mean:136.769140625},cpu:{max:24.220989802525185,min:24.20874876604165,mean:24.214869284283417}}},poolOverflow:16,upstreamConnections:20,counters:{"benchmark.http_2xx":{value:107984,perSecond:1213.3033707865168},"benchmark.pool_overflow":{value:16,perSecond:.1797752808988764},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:20,perSecond:.2247191011235955},upstream_cx_rx_bytes_total:{value:16953488,perSecond:190488.62921348316},upstream_cx_total:{value:20,perSecond:.2247191011235955},upstream_cx_tx_bytes_total:{value:4859280,perSecond:54598.651685393255},upstream_rq_pending_overflow:{value:16,perSecond:.1797752808988764},upstream_rq_pending_total:{value:20,perSecond:.2247191011235955},upstream_rq_total:{value:107984,perSecond:1213.3033707865168}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:400,totalRequests:36e3,latency:{max:18.101247,min:.295056,mean:.396895,pstdev:.25685399999999997,percentiles:{p50:.37620699999999996,p75:.39150300000000005,p80:.396223,p90:.413279,p95:.437551,p99:.816063,p999:3.681919}},resources:{envoyGateway:{memory:{max:148.10546875,min:140.08203125,mean:143.51692708333334},cpu:{max:1.1333333333333446,min:.8666666666666363,mean:1.0095238095238068}},envoyProxy:{memory:{max:138.34765625,min:136.5234375,mean:137.123046875},cpu:{max:8.597541519550166,min:6.052206989843309,mean:8.068733008098855}}},poolOverflow:0,upstreamConnections:7,counters:{"benchmark.http_2xx":{value:36e3,perSecond:400},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:7,perSecond:.07777777777777778},upstream_cx_rx_bytes_total:{value:5652e3,perSecond:62800},upstream_cx_total:{value:7,perSecond:.07777777777777778},upstream_cx_tx_bytes_total:{value:162e4,perSecond:18e3},upstream_rq_pending_total:{value:7,perSecond:.07777777777777778},upstream_rq_total:{value:36e3,perSecond:400}}}]},nee={metadata:{version:"1.6.5",runId:"1.6.5-release-2026-03-13",date:"2026-03-13T02:12:48Z",environment:"GitHub Release",description:"Benchmark results for version 1.6.5 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.6.5/benchmark_report.zip",testConfiguration:{rps:100,connections:100,duration:90,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:404.4831460674157,totalRequests:35999,latency:{max:28.723199,min:.39584,mean:.53622,pstdev:.476311,percentiles:{p50:.494831,p75:.512095,p80:.517439,p90:.536639,p95:.580063,p99:1.403135,p999:6.899455}},resources:{envoyGateway:{memory:{max:138.1640625,min:122.62890625,mean:134.53190104166666},cpu:{max:1.0000000000000002,min:.3999999999999996,mean:.6000000000000002}},envoyProxy:{memory:{max:26.79296875,min:22.66796875,mean:25.896614583333335},cpu:{max:10.442485090963993,min:10.442485090963993,mean:10.442485090963993}}},poolOverflow:1,upstreamConnections:11,counters:{"benchmark.http_2xx":{value:35999,perSecond:404.4831460674157},"benchmark.pool_overflow":{value:1,perSecond:.011235955056179775},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:11,perSecond:.12359550561797752},upstream_cx_rx_bytes_total:{value:5651843,perSecond:63503.85393258427},upstream_cx_total:{value:11,perSecond:.12359550561797752},upstream_cx_tx_bytes_total:{value:1619955,perSecond:18201.74157303371},upstream_rq_pending_overflow:{value:1,perSecond:.011235955056179775},upstream_rq_pending_total:{value:11,perSecond:.12359550561797752},upstream_rq_total:{value:35999,perSecond:404.4831460674157}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1212.9325842696628,totalRequests:107951,latency:{max:40.710142999999995,min:.34687999999999997,mean:.521477,pstdev:.607942,percentiles:{p50:.47779099999999997,p75:.49417500000000003,p80:.49868700000000005,p90:.520239,p95:.570399,p99:1.353791,p999:8.105727}},resources:{envoyGateway:{memory:{max:148.19921875,min:138.01171875,mean:144.55247395833334},cpu:{max:2.066666666666667,min:.40000000000000036,mean:.8044444444444443}},envoyProxy:{memory:{max:33.01953125,min:26.8125,mean:31.680078125},cpu:{max:31.36975133214921,min:18.01566929840301,mean:26.704873468780946}}},poolOverflow:49,upstreamConnections:36,counters:{"benchmark.http_2xx":{value:107951,perSecond:1212.9325842696628},"benchmark.pool_overflow":{value:49,perSecond:.550561797752809},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:36,perSecond:.4044943820224719},upstream_cx_rx_bytes_total:{value:16948307,perSecond:190430.4157303371},upstream_cx_total:{value:36,perSecond:.4044943820224719},upstream_cx_tx_bytes_total:{value:4857795,perSecond:54581.96629213483},upstream_rq_pending_overflow:{value:49,perSecond:.550561797752809},upstream_rq_pending_total:{value:36,perSecond:.4044943820224719},upstream_rq_total:{value:107951,perSecond:1212.9325842696628}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:2020.6629213483145,totalRequests:179839,latency:{max:78.09843099999999,min:.34444800000000003,mean:.5169130000000001,pstdev:.690655,percentiles:{p50:.470895,p75:.48995099999999997,p80:.494351,p90:.518127,p95:.5935670000000001,p99:1.437823,p999:6.165503}},resources:{envoyGateway:{memory:{max:150.58984375,min:142.328125,mean:147.31705729166666},cpu:{max:2.8000000000000034,min:.5333333333333339,mean:.9666666666666673}},envoyProxy:{memory:{max:39.15625,min:36.890625,mean:37.129557291666664},cpu:{max:50.127887801494964,min:31.940523292577545,mean:47.198493725135904}}},poolOverflow:161,upstreamConnections:44,counters:{"benchmark.http_2xx":{value:179839,perSecond:2020.6629213483145},"benchmark.pool_overflow":{value:161,perSecond:1.8089887640449438},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:44,perSecond:.4943820224719101},upstream_cx_rx_bytes_total:{value:28234723,perSecond:317244.0786516854},upstream_cx_total:{value:44,perSecond:.4943820224719101},upstream_cx_tx_bytes_total:{value:8092755,perSecond:90929.83146067416},upstream_rq_pending_overflow:{value:161,perSecond:1.8089887640449438},upstream_rq_pending_total:{value:44,perSecond:.4943820224719101},upstream_rq_total:{value:179839,perSecond:2020.6629213483145}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3199.011111111111,totalRequests:287911,latency:{max:92.168191,min:.30192,mean:.9269270000000001,pstdev:3.663421,percentiles:{p50:.514383,p75:.613663,p80:.653407,p90:.843391,p95:1.150847,p99:7.916031,p999:59.416575}},resources:{envoyGateway:{memory:{max:155.2109375,min:150.078125,mean:153.849609375},cpu:{max:4.6000000000000085,min:.7999999999999948,mean:1.466666666666667}},envoyProxy:{memory:{max:68.71484375,min:59.22265625,mean:65.490234375},cpu:{max:77.80208344578179,min:77.80208344578179,mean:77.80208344578179}}},poolOverflow:89,upstreamConnections:203,counters:{"benchmark.http_2xx":{value:287911,perSecond:3199.011111111111},"benchmark.pool_overflow":{value:89,perSecond:.9888888888888889},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:203,perSecond:2.2555555555555555},upstream_cx_rx_bytes_total:{value:45202027,perSecond:502244.7444444444},upstream_cx_total:{value:203,perSecond:2.2555555555555555},upstream_cx_tx_bytes_total:{value:12955995,perSecond:143955.5},upstream_rq_pending_overflow:{value:89,perSecond:.9888888888888889},upstream_rq_pending_total:{value:203,perSecond:2.2555555555555555},upstream_rq_total:{value:287911,perSecond:3199.011111111111}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3999.211111111111,totalRequests:359929,latency:{max:184.549375,min:.27736,mean:2.461132,pstdev:10.065368999999999,percentiles:{p50:.570431,p75:.785471,p80:.858463,p90:1.5511030000000001,p95:4.246783,p99:66.826239,p999:101.093375}},resources:{envoyGateway:{memory:{max:172.86328125,min:162.59375,mean:168.85026041666666},cpu:{max:6.866666666666673,min:.7333333333333295,mean:1.9111111111111094}},envoyProxy:{memory:{max:97.9296875,min:88.1484375,mean:94.99869791666667},cpu:{max:92.92058106130418,min:48.84836610607844,mean:73.26369989227736}}},poolOverflow:70,upstreamConnections:330,counters:{"benchmark.http_2xx":{value:359929,perSecond:3999.211111111111},"benchmark.pool_overflow":{value:70,perSecond:.7777777777777778},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:330,perSecond:3.6666666666666665},upstream_cx_rx_bytes_total:{value:56508853,perSecond:627876.1444444444},upstream_cx_total:{value:330,perSecond:3.6666666666666665},upstream_cx_tx_bytes_total:{value:16196850,perSecond:179965},upstream_rq_pending_overflow:{value:70,perSecond:.7777777777777778},upstream_rq_pending_total:{value:330,perSecond:3.6666666666666665},upstream_rq_total:{value:359930,perSecond:3999.222222222222}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5479.355555555556,totalRequests:493142,latency:{max:225.689599,min:.33609599999999995,mean:37.651956,pstdev:34.037777,percentiles:{p50:21.173247,p75:67.024895,p80:72.24524699999999,p90:86.859775,p95:98.26303899999999,p99:118.054911,p999:167.845887}},resources:{envoyGateway:{memory:{max:198.2734375,min:188.02734375,mean:194.09921875},cpu:{max:15.53333333333332,min:.933333333333337,mean:3.202222222222225}},envoyProxy:{memory:{max:164.03125,min:152.83984375,mean:155.52122395833334},cpu:{max:99.97510441629572,min:99.86972027972055,mean:99.93038849522263}}},poolOverflow:184,upstreamConnections:216,counters:{"benchmark.http_2xx":{value:493142,perSecond:5479.355555555556},"benchmark.pool_overflow":{value:184,perSecond:2.0444444444444443},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:216,perSecond:2.4},upstream_cx_rx_bytes_total:{value:77423294,perSecond:860258.8222222222},upstream_cx_total:{value:216,perSecond:2.4},upstream_cx_tx_bytes_total:{value:22201110,perSecond:246679},upstream_rq_pending_overflow:{value:184,perSecond:2.0444444444444443},upstream_rq_pending_total:{value:216,perSecond:2.4},upstream_rq_total:{value:493358,perSecond:5481.7555555555555}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:4043.629213483146,totalRequests:359883,latency:{max:155.81183900000002,min:.292848,mean:2.017162,pstdev:8.171909999999999,percentiles:{p50:.5915509999999999,p75:.820703,p80:.9196789999999999,p90:1.597695,p95:3.339007,p99:54.988799,p999:90.357759}},resources:{envoyGateway:{memory:{max:212.12890625,min:168.421875,mean:183.72526041666666},cpu:{max:3.533333333333341,min:1.066666666666644,mean:1.680000000000007}},envoyProxy:{memory:{max:154.5078125,min:152.875,mean:153.92044270833333},cpu:{max:94.21263415152491,min:53.16742164449063,mean:87.0267242259528}}},poolOverflow:114,upstreamConnections:286,counters:{"benchmark.http_2xx":{value:359883,perSecond:4043.629213483146},"benchmark.pool_overflow":{value:114,perSecond:1.2808988764044944},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:286,perSecond:3.2134831460674156},upstream_cx_rx_bytes_total:{value:56501631,perSecond:634849.786516854},upstream_cx_total:{value:286,perSecond:3.2134831460674156},upstream_cx_tx_bytes_total:{value:16194870,perSecond:181964.83146067415},upstream_rq_pending_overflow:{value:114,perSecond:1.2808988764044944},upstream_rq_pending_total:{value:286,perSecond:3.2134831460674156},upstream_rq_total:{value:359886,perSecond:4043.6629213483147}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3198.0666666666666,totalRequests:287826,latency:{max:132.198399,min:.303344,mean:.91598,pstdev:3.57819,percentiles:{p50:.508191,p75:.608255,p80:.647199,p90:.8413109999999999,p95:1.133375,p99:8.679935,p999:54.564863}},resources:{envoyGateway:{memory:{max:171.65234375,min:160.578125,mean:163.03046875},cpu:{max:1.1333333333333446,min:1.066666666666644,mean:1.0811594202898598}},envoyProxy:{memory:{max:153.41796875,min:148.40625,mean:149.32838541666666},cpu:{max:77.81052772856602,min:46.823040725676336,mean:73.12420330057152}}},poolOverflow:174,upstreamConnections:184,counters:{"benchmark.http_2xx":{value:287826,perSecond:3198.0666666666666},"benchmark.pool_overflow":{value:174,perSecond:1.9333333333333333},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:184,perSecond:2.0444444444444443},upstream_cx_rx_bytes_total:{value:45188682,perSecond:502096.4666666667},upstream_cx_total:{value:184,perSecond:2.0444444444444443},upstream_cx_tx_bytes_total:{value:12952170,perSecond:143913},upstream_rq_pending_overflow:{value:174,perSecond:1.9333333333333333},upstream_rq_pending_total:{value:184,perSecond:2.0444444444444443},upstream_rq_total:{value:287826,perSecond:3198.0666666666666}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:1997.4888888888888,totalRequests:179774,latency:{max:99.303423,min:.35732800000000003,mean:.536752,pstdev:1.146692,percentiles:{p50:.473007,p75:.490287,p80:.493727,p90:.5159509999999999,p95:.605375,p99:1.730559,p999:7.974655}},resources:{envoyGateway:{memory:{max:164.15625,min:152.47265625,mean:155.97005208333334},cpu:{max:1.2000000000000455,min:1.0000000000000377,mean:1.0833333333333426}},envoyProxy:{memory:{max:149.203125,min:148.59765625,mean:148.73841145833333},cpu:{max:50.68842311583141,min:50.65819479910333,mean:50.68168741577659}}},poolOverflow:226,upstreamConnections:61,counters:{"benchmark.http_2xx":{value:179774,perSecond:1997.4888888888888},"benchmark.pool_overflow":{value:226,perSecond:2.511111111111111},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:61,perSecond:.6777777777777778},upstream_cx_rx_bytes_total:{value:28224518,perSecond:313605.7555555556},upstream_cx_total:{value:61,perSecond:.6777777777777778},upstream_cx_tx_bytes_total:{value:8089830,perSecond:89887},upstream_rq_pending_overflow:{value:226,perSecond:2.511111111111111},upstream_rq_pending_total:{value:61,perSecond:.6777777777777778},upstream_rq_total:{value:179774,perSecond:1997.4888888888888}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1199.4,totalRequests:107946,latency:{max:72.323071,min:.365152,mean:.52208,pstdev:.6794760000000001,percentiles:{p50:.47329499999999997,p75:.490239,p80:.494767,p90:.5165270000000001,p95:.563295,p99:1.440767,p999:8.894975}},resources:{envoyGateway:{memory:{max:156.05859375,min:144.6796875,mean:149.99635416666666},cpu:{max:1.1999999999999507,min:.933333333333337,mean:1.033333333333328}},envoyProxy:{memory:{max:148.77734375,min:148.56640625,mean:148.661328125},cpu:{max:30.93122336812199,min:17.72173064097516,mean:24.95206369864552}}},poolOverflow:54,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:107946,perSecond:1199.4},"benchmark.pool_overflow":{value:54,perSecond:.6},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:37,perSecond:.4111111111111111},upstream_cx_rx_bytes_total:{value:16947522,perSecond:188305.8},upstream_cx_total:{value:37,perSecond:.4111111111111111},upstream_cx_tx_bytes_total:{value:4857570,perSecond:53973},upstream_rq_pending_overflow:{value:54,perSecond:.6},upstream_rq_pending_total:{value:37,perSecond:.4111111111111111},upstream_rq_total:{value:107946,perSecond:1199.4}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:399.96666666666664,totalRequests:35997,latency:{max:35.893247,min:.395216,mean:.526502,pstdev:.442801,percentiles:{p50:.493535,p75:.510991,p80:.5156310000000001,p90:.531391,p95:.560223,p99:1.255679,p999:5.240063}},resources:{envoyGateway:{memory:{max:148.875,min:146.53125,mean:147.14166666666668},cpu:{max:1.1333333333333446,min:.933333333333337,mean:1.0305555555555694}},envoyProxy:{memory:{max:148.70703125,min:148.58203125,mean:148.61848958333334},cpu:{max:11.14762859633839,min:6.712358765475222,mean:9.116260686856515}}},poolOverflow:3,upstreamConnections:12,counters:{"benchmark.http_2xx":{value:35997,perSecond:399.96666666666664},"benchmark.pool_overflow":{value:3,perSecond:.03333333333333333},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:12,perSecond:.13333333333333333},upstream_cx_rx_bytes_total:{value:5651529,perSecond:62794.76666666667},upstream_cx_total:{value:12,perSecond:.13333333333333333},upstream_cx_tx_bytes_total:{value:1619865,perSecond:17998.5},upstream_rq_pending_overflow:{value:3,perSecond:.03333333333333333},upstream_rq_pending_total:{value:12,perSecond:.13333333333333333},upstream_rq_total:{value:35997,perSecond:399.96666666666664}}}]},ree={metadata:{version:"1.6.4",runId:"1.6.4-release-2026-02-11",date:"2026-02-11T18:48:14Z",environment:"GitHub Release",description:"Benchmark results for version 1.6.4 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.6.4/benchmark_report.zip",testConfiguration:{rps:100,connections:100,duration:90,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:404.46067415730334,totalRequests:35997,latency:{max:11.386367,min:.35,mean:.46965,pstdev:.225788,percentiles:{p50:.442879,p75:.456559,p80:.461311,p90:.480175,p95:.520079,p99:1.130047,p999:3.363583}},resources:{envoyGateway:{memory:{max:135.9765625,min:123.1640625,mean:132.58528645833334},cpu:{max:.8,min:.33333333333333287,mean:.5222222222222221}},envoyProxy:{memory:{max:27.64453125,min:6.15234375,mean:23.934375},cpu:{max:9.529624248827844,min:5.990168017599307,mean:8.839583181101693}}},poolOverflow:3,upstreamConnections:7,counters:{"benchmark.http_2xx":{value:35997,perSecond:404.46067415730334},"benchmark.pool_overflow":{value:3,perSecond:.033707865168539325},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:7,perSecond:.07865168539325842},upstream_cx_rx_bytes_total:{value:5651529,perSecond:63500.32584269663},upstream_cx_total:{value:7,perSecond:.07865168539325842},upstream_cx_tx_bytes_total:{value:1619865,perSecond:18200.73033707865},upstream_rq_pending_overflow:{value:3,perSecond:.033707865168539325},upstream_rq_pending_total:{value:7,perSecond:.07865168539325842},upstream_rq_total:{value:35997,perSecond:404.46067415730334}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1199.4555555555555,totalRequests:107951,latency:{max:62.380031,min:.340896,mean:.470731,pstdev:.613115,percentiles:{p50:.43300700000000003,p75:.447071,p80:.451215,p90:.46831900000000004,p95:.5087349999999999,p99:1.202559,p999:5.438975}},resources:{envoyGateway:{memory:{max:145.69921875,min:136.0625,mean:142.76380208333333},cpu:{max:1.9333333333333333,min:.40000000000000036,mean:.7777777777777778}},envoyProxy:{memory:{max:33.57421875,min:29.44140625,mean:32.14075520833333},cpu:{max:28.238767669101605,min:16.703645871077857,mean:26.294669115997362}}},poolOverflow:49,upstreamConnections:26,counters:{"benchmark.http_2xx":{value:107951,perSecond:1199.4555555555555},"benchmark.pool_overflow":{value:49,perSecond:.5444444444444444},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:26,perSecond:.28888888888888886},upstream_cx_rx_bytes_total:{value:16948307,perSecond:188314.52222222224},upstream_cx_total:{value:26,perSecond:.28888888888888886},upstream_cx_tx_bytes_total:{value:4857795,perSecond:53975.5},upstream_rq_pending_overflow:{value:49,perSecond:.5444444444444444},upstream_rq_pending_total:{value:26,perSecond:.28888888888888886},upstream_rq_total:{value:107951,perSecond:1199.4555555555555}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:2021.2359550561798,totalRequests:179890,latency:{max:60.870655,min:.33552000000000004,mean:.471221,pstdev:.568649,percentiles:{p50:.435999,p75:.449839,p80:.454463,p90:.47441500000000003,p95:.524127,p99:1.221439,p999:4.652543}},resources:{envoyGateway:{memory:{max:151.2734375,min:138.15234375,mean:144.94466145833334},cpu:{max:2.4666666666666672,min:.4666666666666685,mean:.9777777777777779}},envoyProxy:{memory:{max:37.6328125,min:37.53515625,mean:37.585286458333336},cpu:{max:46.866473690981564,min:46.622352764535854,mean:46.82578686990728}}},poolOverflow:110,upstreamConnections:36,counters:{"benchmark.http_2xx":{value:179890,perSecond:2021.2359550561798},"benchmark.pool_overflow":{value:110,perSecond:1.2359550561797752},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:36,perSecond:.4044943820224719},upstream_cx_rx_bytes_total:{value:28242730,perSecond:317334.0449438202},upstream_cx_total:{value:36,perSecond:.4044943820224719},upstream_cx_tx_bytes_total:{value:8095050,perSecond:90955.61797752809},upstream_rq_pending_overflow:{value:110,perSecond:1.2359550561797752},upstream_rq_pending_total:{value:36,perSecond:.4044943820224719},upstream_rq_total:{value:179890,perSecond:2021.2359550561798}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3199.3444444444444,totalRequests:287941,latency:{max:148.733951,min:.31295999999999996,mean:.97614,pstdev:4.529151000000001,percentiles:{p50:.47313500000000003,p75:.554079,p80:.591647,p90:.764671,p95:1.004255,p99:13.700095,p999:68.681727}},resources:{envoyGateway:{memory:{max:152.23046875,min:145.31640625,mean:150.138671875},cpu:{max:4.666666666666662,min:.6666666666666643,mean:1.455555555555555}},envoyProxy:{memory:{max:71.12109375,min:61.76171875,mean:66.30546875},cpu:{max:74.6521586726646,min:73.32263545627377,mean:73.88321261511852}}},poolOverflow:59,upstreamConnections:256,counters:{"benchmark.http_2xx":{value:287941,perSecond:3199.3444444444444},"benchmark.pool_overflow":{value:59,perSecond:.6555555555555556},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:256,perSecond:2.8444444444444446},upstream_cx_rx_bytes_total:{value:45206737,perSecond:502297.0777777778},upstream_cx_total:{value:256,perSecond:2.8444444444444446},upstream_cx_tx_bytes_total:{value:12957345,perSecond:143970.5},upstream_rq_pending_overflow:{value:59,perSecond:.6555555555555556},upstream_rq_pending_total:{value:256,perSecond:2.8444444444444446},upstream_rq_total:{value:287941,perSecond:3199.3444444444444}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3993.5444444444443,totalRequests:359419,latency:{max:126.963711,min:.326976,mean:1.743744,pstdev:7.812901000000001,percentiles:{p50:.5075029999999999,p75:.622399,p80:.701055,p90:.975903,p95:2.395647,p99:52.015103,p999:89.567231}},resources:{envoyGateway:{memory:{max:162.53125,min:160.515625,mean:161.974609375},cpu:{max:6.933333333333351,min:.933333333333337,mean:1.9777777777777799}},envoyProxy:{memory:{max:95.48046875,min:90.8203125,mean:93.844140625},cpu:{max:91.90152781338112,min:51.79498024497793,mean:71.5604851909052}}},poolOverflow:224,upstreamConnections:176,counters:{"benchmark.http_2xx":{value:359419,perSecond:3993.5444444444443},"benchmark.pool_overflow":{value:224,perSecond:2.488888888888889},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:176,perSecond:1.9555555555555555},upstream_cx_rx_bytes_total:{value:56428783,perSecond:626986.4777777778},upstream_cx_total:{value:176,perSecond:1.9555555555555555},upstream_cx_tx_bytes_total:{value:16175970,perSecond:179733},upstream_rq_pending_overflow:{value:224,perSecond:2.488888888888889},upstream_rq_pending_total:{value:176,perSecond:1.9555555555555555},upstream_rq_total:{value:359466,perSecond:3994.0666666666666}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5014.222222222223,totalRequests:451280,latency:{max:276.578303,min:.3776,mean:51.310144,pstdev:37.19974,percentiles:{p50:59.969535,p75:81.895423,p80:86.302719,p90:97.402879,p95:104.501247,p99:130.023423,p999:194.633727}},resources:{envoyGateway:{memory:{max:191.44140625,min:179.79296875,mean:185.4},cpu:{max:13.333333333333334,min:.8666666666667312,mean:3.011111111111104}},envoyProxy:{memory:{max:153.73828125,min:147.21484375,mean:151.28802083333332},cpu:{max:100.07782742565323,min:66.06429997077066,mean:91.7528157677912}}},poolOverflow:134,upstreamConnections:266,counters:{"benchmark.http_2xx":{value:451280,perSecond:5014.222222222223},"benchmark.pool_overflow":{value:134,perSecond:1.488888888888889},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:266,perSecond:2.9555555555555557},upstream_cx_rx_bytes_total:{value:70850960,perSecond:787232.8888888889},upstream_cx_total:{value:266,perSecond:2.9555555555555557},upstream_cx_tx_bytes_total:{value:20316195,perSecond:225735.5},upstream_rq_pending_overflow:{value:134,perSecond:1.488888888888889},upstream_rq_pending_total:{value:266,perSecond:2.9555555555555557},upstream_rq_total:{value:451471,perSecond:5016.344444444445}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3999.2555555555555,totalRequests:359933,latency:{max:254.033919,min:.267488,mean:2.765009,pstdev:12.463928000000001,percentiles:{p50:.5370550000000001,p75:.7140789999999999,p80:.7666869999999999,p90:1.1643510000000001,p95:3.600639,p99:78.381055,p999:138.592255}},resources:{envoyGateway:{memory:{max:193.22265625,min:169.76171875,mean:174.6515625},cpu:{max:1.1997600479904476,min:1.066666666666644,mean:1.1083277966664442}},envoyProxy:{memory:{max:153.9453125,min:152.50390625,mean:153.59830729166666},cpu:{max:90.6643189111433,min:48.332151206771016,mean:72.5650898137253}}},poolOverflow:67,upstreamConnections:333,counters:{"benchmark.http_2xx":{value:359933,perSecond:3999.2555555555555},"benchmark.pool_overflow":{value:67,perSecond:.7444444444444445},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:333,perSecond:3.7},upstream_cx_rx_bytes_total:{value:56509481,perSecond:627883.1222222223},upstream_cx_total:{value:333,perSecond:3.7},upstream_cx_tx_bytes_total:{value:16196985,perSecond:179966.5},upstream_rq_pending_overflow:{value:67,perSecond:.7444444444444445},upstream_rq_pending_total:{value:333,perSecond:3.7},upstream_rq_total:{value:359933,perSecond:3999.2555555555555}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3198.9555555555557,totalRequests:287906,latency:{max:124.383231,min:.312,mean:.91919,pstdev:3.678308,percentiles:{p50:.509023,p75:.601823,p80:.643743,p90:.834751,p95:1.167167,p99:8.297727,p999:58.734591}},resources:{envoyGateway:{memory:{max:184.0546875,min:155.8671875,mean:166.537109375},cpu:{max:1.2666666666666515,min:.9999999999999432,mean:1.1272727272727225}},envoyProxy:{memory:{max:153.81640625,min:148.70703125,mean:149.38411458333334},cpu:{max:74.81835549167545,min:70.37882085331354,mean:72.42984265413129}}},poolOverflow:94,upstreamConnections:188,counters:{"benchmark.http_2xx":{value:287906,perSecond:3198.9555555555557},"benchmark.pool_overflow":{value:94,perSecond:1.0444444444444445},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:188,perSecond:2.088888888888889},upstream_cx_rx_bytes_total:{value:45201242,perSecond:502236.02222222224},upstream_cx_total:{value:188,perSecond:2.088888888888889},upstream_cx_tx_bytes_total:{value:12955770,perSecond:143953},upstream_rq_pending_overflow:{value:94,perSecond:1.0444444444444445},upstream_rq_pending_total:{value:188,perSecond:2.088888888888889},upstream_rq_total:{value:287906,perSecond:3198.9555555555557}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:2021.112359550562,totalRequests:179879,latency:{max:75.083775,min:.332592,mean:.471157,pstdev:.623542,percentiles:{p50:.432367,p75:.447295,p80:.45182300000000003,p90:.468383,p95:.512367,p99:1.296831,p999:4.564223}},resources:{envoyGateway:{memory:{max:163.9921875,min:151.484375,mean:153.562109375},cpu:{max:1.1333333333333446,min:.9999999999999432,mean:1.0416666666666703}},envoyProxy:{memory:{max:149.2265625,min:148.9765625,mean:149.03190104166666},cpu:{max:47.40828974480921,min:33.23458396978556,mean:45.411667373423406}}},poolOverflow:121,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:179879,perSecond:2021.112359550562},"benchmark.pool_overflow":{value:121,perSecond:1.3595505617977528},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:38,perSecond:.42696629213483145},upstream_cx_rx_bytes_total:{value:28241003,perSecond:317314.6404494382},upstream_cx_total:{value:38,perSecond:.42696629213483145},upstream_cx_tx_bytes_total:{value:8094555,perSecond:90950.05617977527},upstream_rq_pending_overflow:{value:121,perSecond:1.3595505617977528},upstream_rq_pending_total:{value:38,perSecond:.42696629213483145},upstream_rq_total:{value:179879,perSecond:2021.112359550562}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1212.8426966292134,totalRequests:107943,latency:{max:71.524351,min:.35416000000000003,mean:.475783,pstdev:.648528,percentiles:{p50:.438783,p75:.455471,p80:.460527,p90:.478863,p95:.520927,p99:1.179327,p999:4.997887}},resources:{envoyGateway:{memory:{max:153.9140625,min:149.5703125,mean:150.66848958333333},cpu:{max:1.2000000000000457,min:.9999999999999433,mean:1.095238095238087}},envoyProxy:{memory:{max:149.0078125,min:147.71484375,mean:148.062890625},cpu:{max:29.494176952217742,min:29.494176952217742,mean:29.494176952217742}}},poolOverflow:57,upstreamConnections:27,counters:{"benchmark.http_2xx":{value:107943,perSecond:1212.8426966292134},"benchmark.pool_overflow":{value:57,perSecond:.6404494382022472},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:27,perSecond:.30337078651685395},upstream_cx_rx_bytes_total:{value:16947051,perSecond:190416.3033707865},upstream_cx_total:{value:27,perSecond:.30337078651685395},upstream_cx_tx_bytes_total:{value:4857435,perSecond:54577.92134831461},upstream_rq_pending_overflow:{value:57,perSecond:.6404494382022472},upstream_rq_pending_total:{value:27,perSecond:.30337078651685395},upstream_rq_total:{value:107943,perSecond:1212.8426966292134}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:399.9222222222222,totalRequests:35993,latency:{max:57.382911,min:.35481599999999996,mean:.4928620000000001,pstdev:.7162310000000001,percentiles:{p50:.450783,p75:.470527,p80:.479391,p90:.512191,p95:.562975,p99:1.138623,p999:5.999103}},resources:{envoyGateway:{memory:{max:152.5078125,min:144.46484375,mean:146.828515625},cpu:{max:1.2000000000000457,min:.933333333333337,mean:1.0724637681159428}},envoyProxy:{memory:{max:147.734375,min:147.44921875,mean:147.50325520833334},cpu:{max:10.827605653415667,min:10.123649291472635,mean:10.546023108638455}}},poolOverflow:7,upstreamConnections:14,counters:{"benchmark.http_2xx":{value:35993,perSecond:399.9222222222222},"benchmark.pool_overflow":{value:7,perSecond:.07777777777777778},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:14,perSecond:.15555555555555556},upstream_cx_rx_bytes_total:{value:5650901,perSecond:62787.78888888889},upstream_cx_total:{value:14,perSecond:.15555555555555556},upstream_cx_tx_bytes_total:{value:1619685,perSecond:17996.5},upstream_rq_pending_overflow:{value:7,perSecond:.07777777777777778},upstream_rq_pending_total:{value:14,perSecond:.15555555555555556},upstream_rq_total:{value:35993,perSecond:399.9222222222222}}}]},aee={metadata:{version:"1.6.1",runId:"1.6.1-1765931812524",date:"2025-12-17T00:36:52.524Z",environment:"GitHub CI",description:"Benchmark results for version 1.6.1",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5304.85,totalRequests:159146,latency:{min:.376,mean:6.595,max:70.885,pstdev:11.48,percentiles:{p50:3.196,p75:5.135,p80:5.825,p90:9.106,p95:45.002,p99:53.958,p999:58.937}},resources:{envoyGateway:{memory:{min:121.21,max:137.21,mean:133.6},cpu:{min:.27,max:1.07,mean:.45}},envoyProxy:{memory:{min:5.99,max:27.8,mean:26.65},cpu:{min:0,max:100,mean:7.14}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:159146,perSecond:5304.85},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24985922,perSecond:832861.45},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7163235,perSecond:238773.75},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:159183,perSecond:5306.08}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5315.3,totalRequests:159459,latency:{min:.394,mean:6.608,max:78.028,pstdev:11.984,percentiles:{p50:3.11,p75:4.873,p80:5.487,p90:8.302,p95:47.81,p99:54.222,p999:59.463}},resources:{envoyGateway:{memory:{min:137.2,max:147.08,mean:142.14},cpu:{min:.27,max:1.93,mean:.63}},envoyProxy:{memory:{min:29.66,max:33.89,mean:33.5},cpu:{min:0,max:97.78,mean:9.59}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:159459,perSecond:5315.3},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:25035063,perSecond:834501.78},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7177320,perSecond:239243.91},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:159496,perSecond:5316.53}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5283.74,totalRequests:158514,latency:{min:.378,mean:6.628,max:93.491,pstdev:11.944,percentiles:{p50:3.137,p75:5.002,p80:5.624,p90:8.369,p95:47.605,p99:53.665,p999:58.869}},resources:{envoyGateway:{memory:{min:140.7,max:151.43,mean:145.16},cpu:{min:.4,max:2.67,mean:.76}},envoyProxy:{memory:{min:37.73,max:40.02,mean:39.47},cpu:{min:0,max:25.9,mean:.59}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:158514,perSecond:5283.74},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24886698,perSecond:829546.43},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7134615,perSecond:237817.59},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:158547,perSecond:5284.84}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5204.25,totalRequests:156128,latency:{min:.373,mean:6.726,max:91.82,pstdev:12.218,percentiles:{p50:3.131,p75:4.96,p80:5.612,p90:8.593,p95:47.857,p99:54.527,p999:63.778}},resources:{envoyGateway:{memory:{min:147.88,max:153.92,mean:151.47},cpu:{min:.47,max:4.73,mean:1.07}},envoyProxy:{memory:{min:62.02,max:62.22,mean:62.08},cpu:{min:0,max:45.07,mean:1.13}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:156128,perSecond:5204.25},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24512096,perSecond:817067.71},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7027425,perSecond:234246.88},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:156165,perSecond:5205.49}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5194.25,totalRequests:155829,latency:{min:.383,mean:6.935,max:79.613,pstdev:12.512,percentiles:{p50:3.204,p75:5.117,p80:5.808,p90:8.937,p95:48.531,p99:55.611,p999:67.059}},resources:{envoyGateway:{memory:{min:157.16,max:172.57,mean:168.57},cpu:{min:.53,max:7.2,mean:1.47}},envoyProxy:{memory:{min:84.09,max:86.29,mean:86.04},cpu:{min:0,max:100.05,mean:12.87}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:155829,perSecond:5194.25},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24465153,perSecond:815496.96},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7013565,perSecond:233783.17},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:155857,perSecond:5195.18}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5115.06,totalRequests:153454,latency:{min:.393,mean:7.085,max:109.756,pstdev:12.95,percentiles:{p50:3.195,p75:5.039,p80:5.692,p90:8.994,p95:49.426,p99:58.23,p999:70.422}},resources:{envoyGateway:{memory:{min:173.94,max:196.39,mean:190.77},cpu:{min:.6,max:13.93,mean:1.97}},envoyProxy:{memory:{min:140.53,max:140.7,mean:140.57},cpu:{min:0,max:5.67,mean:1.57}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:153454,perSecond:5115.06},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24092278,perSecond:803064.79},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6906420,perSecond:230210.81},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:153476,perSecond:5115.8}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5338.31,totalRequests:160153,latency:{min:.379,mean:6.782,max:75.825,pstdev:11.999,percentiles:{p50:3.274,p75:5.094,p80:5.709,p90:8.727,p95:47.667,p99:54.355,p999:59.471}},resources:{envoyGateway:{memory:{min:145.52,max:147.96,mean:146.23},cpu:{min:0,max:1.07,mean:.75}},envoyProxy:{memory:{min:138.12,max:138.57,mean:138.22},cpu:{min:0,max:100.01,mean:9.46}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:160153,perSecond:5338.31},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25144021,perSecond:838114.93},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7207920,perSecond:240258.52},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:160176,perSecond:5339.08}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5292.35,totalRequests:158769,latency:{min:.379,mean:6.68,max:76.271,pstdev:12.093,percentiles:{p50:3.116,p75:4.881,p80:5.514,p90:8.447,p95:48.091,p99:54.738,p999:61.007}},resources:{envoyGateway:{memory:{min:141.33,max:151.66,mean:147.23},cpu:{min:0,max:1.2,mean:.71}},envoyProxy:{memory:{min:138.14,max:138.32,mean:138.19},cpu:{min:0,max:99.95,mean:4.5}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:158769,perSecond:5292.35},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24926733,perSecond:830898.42},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7145865,perSecond:238197.6},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:158797,perSecond:5293.28}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5353.39,totalRequests:160607,latency:{min:.379,mean:7.767,max:94.674,pstdev:12.965,percentiles:{p50:3.649,p75:5.985,p80:6.804,p90:11.396,p95:49.006,p99:55.625,p999:63.916}},resources:{envoyGateway:{memory:{min:146.41,max:158.55,mean:150.46},cpu:{min:0,max:1.2,mean:.75}},envoyProxy:{memory:{min:138.3,max:138.52,mean:138.36},cpu:{min:0,max:100.2,mean:9.9}}},poolOverflow:356,upstreamConnections:44,counters:{"benchmark.http_2xx":{value:160607,perSecond:5353.39},"benchmark.pool_overflow":{value:356,perSecond:11.87},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:44,perSecond:1.47},upstream_cx_rx_bytes_total:{value:25215299,perSecond:840482.78},upstream_cx_total:{value:44,perSecond:1.47},upstream_cx_tx_bytes_total:{value:7228575,perSecond:240944.71},upstream_rq_pending_overflow:{value:356,perSecond:11.87},upstream_rq_pending_total:{value:44,perSecond:1.47},upstream_rq_total:{value:160635,perSecond:5354.33}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5251.66,totalRequests:157550,latency:{min:.362,mean:6.85,max:102.064,pstdev:12.185,percentiles:{p50:3.19,p75:5.111,p80:5.817,p90:9.126,p95:47.685,p99:54.695,p999:63.205}},resources:{envoyGateway:{memory:{min:158.54,max:168.72,mean:160.6},cpu:{min:0,max:1.2,mean:.73}},envoyProxy:{memory:{min:138.3,max:140.56,mean:138.63},cpu:{min:0,max:99.87,mean:4.61}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:157550,perSecond:5251.66},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24735350,perSecond:824510.95},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7091460,perSecond:236381.79},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:157588,perSecond:5252.93}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5226.15,totalRequests:156791,latency:{min:.367,mean:6.93,max:87.855,pstdev:12.538,percentiles:{p50:3.176,p75:5.094,p80:5.78,p90:9.033,p95:48.709,p99:55.67,p999:65.673}},resources:{envoyGateway:{memory:{min:167.79,max:196.18,mean:171.16},cpu:{min:0,max:1.13,mean:.74}},envoyProxy:{memory:{min:140.56,max:149.79,mean:141.48},cpu:{min:0,max:99.89,mean:9.34}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:156791,perSecond:5226.15},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24616187,perSecond:820506.23},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7056720,perSecond:235214.44},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:156816,perSecond:5226.99}}}]},oee={metadata:{version:"1.6.0",runId:"1.6.0-1765940482907",date:"2025-12-17T03:01:22.907Z",environment:"GitHub CI",description:"Benchmark results for version 1.6.0",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5339.06,totalRequests:160172,latency:{min:.377,mean:6.73,max:89.411,pstdev:11.378,percentiles:{p50:3.326,p75:5.429,p80:6.219,p90:9.755,p95:43.753,p99:53.676,p999:58.869}},resources:{envoyGateway:{memory:{min:116.49,max:137.48,mean:136.01},cpu:{min:0,max:1.26,mean:.45}},envoyProxy:{memory:{min:4.3,max:27.61,mean:24.84},cpu:{min:0,max:99.91,mean:3.8}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:160172,perSecond:5339.06},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25147004,perSecond:838232.6},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7209450,perSecond:240314.75},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:160210,perSecond:5340.33}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5301.93,totalRequests:159058,latency:{min:.376,mean:6.607,max:73.531,pstdev:11.89,percentiles:{p50:3.156,p75:4.917,p80:5.531,p90:8.259,p95:47.218,p99:54.067,p999:59.246}},resources:{envoyGateway:{memory:{min:134.82,max:148.47,mean:145.25},cpu:{min:.33,max:2,mean:.62}},envoyProxy:{memory:{min:29.24,max:33.7,mean:32.86},cpu:{min:0,max:87.87,mean:5.11}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:159058,perSecond:5301.93},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24972106,perSecond:832402.72},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7159275,perSecond:238642.27},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:159095,perSecond:5303.16}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5336.06,totalRequests:160089,latency:{min:.384,mean:6.79,max:76.795,pstdev:12.17,percentiles:{p50:3.197,p75:5.026,p80:5.667,p90:8.665,p95:48.017,p99:54.579,p999:60.415}},resources:{envoyGateway:{memory:{min:138.84,max:147.74,mean:145.34},cpu:{min:.4,max:2.67,mean:.81}},envoyProxy:{memory:{min:37.31,max:39.85,mean:39.28},cpu:{min:0,max:99.98,mean:2.72}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:160089,perSecond:5336.06},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25133973,perSecond:837762.12},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7205040,perSecond:240157.4},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:160112,perSecond:5336.83}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5270.65,totalRequests:158120,latency:{min:.379,mean:6.688,max:80.261,pstdev:12.107,percentiles:{p50:3.16,p75:4.938,p80:5.551,p90:8.416,p95:47.781,p99:55.164,p999:61.943}},resources:{envoyGateway:{memory:{min:143.84,max:153.12,mean:152.05},cpu:{min:.47,max:4.8,mean:1.07}},envoyProxy:{memory:{min:59.5,max:61.68,mean:61.56},cpu:{min:0,max:100.02,mean:9.25}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:158120,perSecond:5270.65},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24824840,perSecond:827492.11},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7117065,perSecond:237234.77},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:158157,perSecond:5271.88}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5247.62,totalRequests:157429,latency:{min:.356,mean:6.872,max:81.539,pstdev:12.331,percentiles:{p50:3.228,p75:5.062,p80:5.705,p90:8.678,p95:48.199,p99:55.171,p999:65.744}},resources:{envoyGateway:{memory:{min:161.45,max:169.55,mean:166.8},cpu:{min:.6,max:6.87,mean:1.46}},envoyProxy:{memory:{min:81.71,max:86.02,mean:85.62},cpu:{min:0,max:99.81,mean:6.02}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:157429,perSecond:5247.62},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24716353,perSecond:823876.99},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7086015,perSecond:236200.09},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:157467,perSecond:5248.89}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5124.53,totalRequests:153737,latency:{min:.357,mean:7.041,max:88.129,pstdev:12.624,percentiles:{p50:3.241,p75:5.175,p80:5.882,p90:9.462,p95:47.947,p99:57.892,p999:69.079}},resources:{envoyGateway:{memory:{min:181.93,max:192.07,mean:188.87},cpu:{min:.6,max:12.67,mean:2.17}},envoyProxy:{memory:{min:140.27,max:140.47,mean:140.43},cpu:{min:0,max:99.81,mean:14.62}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:153737,perSecond:5124.53},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24136709,perSecond:804550.82},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6918750,perSecond:230623.24},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:153750,perSecond:5124.96}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5332.22,totalRequests:159967,latency:{min:.377,mean:6.769,max:68.108,pstdev:12.093,percentiles:{p50:3.195,p75:5.134,p80:5.793,p90:8.793,p95:47.841,p99:54.325,p999:59.437}},resources:{envoyGateway:{memory:{min:140.07,max:148.71,mean:144.23},cpu:{min:0,max:1.07,mean:.68}},envoyProxy:{memory:{min:135.8,max:135.99,mean:135.88},cpu:{min:0,max:37.96,mean:.81}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:159967,perSecond:5332.22},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25114819,perSecond:837157.78},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7200225,perSecond:240006.68},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:160005,perSecond:5333.48}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5360.96,totalRequests:160829,latency:{min:.385,mean:6.567,max:78.565,pstdev:12.02,percentiles:{p50:3.047,p75:4.812,p80:5.446,p90:8.291,p95:47.761,p99:54.624,p999:59.953}},resources:{envoyGateway:{memory:{min:143.64,max:152.11,mean:147.81},cpu:{min:0,max:1.2,mean:.76}},envoyProxy:{memory:{min:135.8,max:136.22,mean:135.88},cpu:{min:0,max:99.95,mean:4.35}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:160829,perSecond:5360.96},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:25250153,perSecond:841670.33},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7238970,perSecond:241298.59},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:160866,perSecond:5362.19}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5387.07,totalRequests:161620,latency:{min:.368,mean:6.902,max:91.717,pstdev:12.257,percentiles:{p50:3.235,p75:5.117,p80:5.779,p90:8.942,p95:48.25,p99:55.025,p999:61.599}},resources:{envoyGateway:{memory:{min:152.11,max:163.4,mean:154.49},cpu:{min:0,max:1.07,mean:.68}},envoyProxy:{memory:{min:135.81,max:136.21,mean:135.88},cpu:{min:0,max:.47,mean:.06}}},poolOverflow:361,upstreamConnections:39,counters:{"benchmark.http_2xx":{value:161620,perSecond:5387.07},"benchmark.pool_overflow":{value:361,perSecond:12.03},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:39,perSecond:1.3},upstream_cx_rx_bytes_total:{value:25374340,perSecond:845769.67},upstream_cx_total:{value:39,perSecond:1.3},upstream_cx_tx_bytes_total:{value:7274070,perSecond:242457.06},upstream_rq_pending_overflow:{value:361,perSecond:12.03},upstream_rq_pending_total:{value:39,perSecond:1.3},upstream_rq_total:{value:161646,perSecond:5387.93}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5326.66,totalRequests:159800,latency:{min:.381,mean:6.971,max:99.508,pstdev:12.521,percentiles:{p50:3.196,p75:5.124,p80:5.775,p90:9.183,p95:48.947,p99:55.918,p999:63.801}},resources:{envoyGateway:{memory:{min:156.4,max:175.45,mean:164.47},cpu:{min:0,max:1.27,mean:.76}},envoyProxy:{memory:{min:135.8,max:140.45,mean:136.18},cpu:{min:0,max:99.85,mean:9.76}}},poolOverflow:361,upstreamConnections:39,counters:{"benchmark.http_2xx":{value:159800,perSecond:5326.66},"benchmark.pool_overflow":{value:361,perSecond:12.03},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:39,perSecond:1.3},upstream_cx_rx_bytes_total:{value:25088600,perSecond:836285.42},upstream_cx_total:{value:39,perSecond:1.3},upstream_cx_tx_bytes_total:{value:7192755,perSecond:239758.14},upstream_rq_pending_overflow:{value:361,perSecond:12.03},upstream_rq_pending_total:{value:39,perSecond:1.3},upstream_rq_total:{value:159839,perSecond:5327.96}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5258.42,totalRequests:157753,latency:{min:.372,mean:6.861,max:98.947,pstdev:12.533,percentiles:{p50:3.083,p75:4.948,p80:5.617,p90:8.963,p95:48.871,p99:56.164,p999:66.125}},resources:{envoyGateway:{memory:{min:168.89,max:187.7,mean:172.5},cpu:{min:0,max:1.2,mean:.73}},envoyProxy:{memory:{min:140.43,max:140.85,mean:140.5},cpu:{min:0,max:91.32,mean:1.79}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:157753,perSecond:5258.42},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24767221,perSecond:825571.62},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7100595,perSecond:236685.81},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:157791,perSecond:5259.68}}}]},iee={metadata:{version:"1.5.5",runId:"1.5.5-1763692944638",date:"2025-11-21T02:42:24.638Z",environment:"GitHub CI",description:"Benchmark results for version 1.5.5",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5036.75,totalRequests:151111,latency:{min:.358,mean:6.858,max:73.158,pstdev:11.547,percentiles:{p50:3.378,p75:5.537,p80:6.339,p90:10.011,p95:45.465,p99:53.417,p999:58.159}},resources:{envoyGateway:{memory:{min:113.75,max:134.09,mean:130.21},cpu:{min:0,max:1.07,mean:.45}},envoyProxy:{memory:{min:0,max:28.17,mean:24.39},cpu:{min:0,max:99.13,mean:9.4}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:151111,perSecond:5036.75},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:23724427,perSecond:790770.25},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6801480,perSecond:226703.39},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:151144,perSecond:5037.85}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5111.15,totalRequests:153336,latency:{min:.402,mean:7.045,max:86.048,pstdev:12.225,percentiles:{p50:3.316,p75:5.416,p80:6.159,p90:9.64,p95:47.675,p99:54.513,p999:60.006}},resources:{envoyGateway:{memory:{min:134.09,max:140.93,mean:137.68},cpu:{min:.4,max:4.13,mean:.86}},envoyProxy:{memory:{min:27.99,max:32.19,mean:31.55},cpu:{min:0,max:.39,mean:.03}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:153336,perSecond:5111.15},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24073752,perSecond:802450.43},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6901650,perSecond:230052.72},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:153370,perSecond:5112.28}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5032,totalRequests:150960,latency:{min:.383,mean:6.985,max:85.159,pstdev:12.38,percentiles:{p50:3.242,p75:5.302,p80:6.026,p90:9.567,p95:48.363,p99:54.974,p999:61.327}},resources:{envoyGateway:{memory:{min:137.87,max:141.86,mean:139.55},cpu:{min:.4,max:5.2,mean:1.01}},envoyProxy:{memory:{min:32.05,max:38.38,mean:37.23},cpu:{min:0,max:.56,mean:.1}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:150960,perSecond:5032},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:23700720,perSecond:790023.81},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6794865,perSecond:226495.45},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:150997,perSecond:5033.23}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:4987.38,totalRequests:149622,latency:{min:.375,mean:6.978,max:144.031,pstdev:12.357,percentiles:{p50:3.327,p75:5.293,p80:5.983,p90:9.21,p95:47.702,p99:54.665,p999:65.447}},resources:{envoyGateway:{memory:{min:150.91,max:166.47,mean:154.26},cpu:{min:.47,max:14.47,mean:2.05}},envoyProxy:{memory:{min:38.27,max:60.52,mean:59.21},cpu:{min:0,max:99.83,mean:14.85}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:149622,perSecond:4987.38},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:23490654,perSecond:783019.07},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6734655,perSecond:224487.72},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:149659,perSecond:4988.62}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5054.22,totalRequests:151627,latency:{min:.38,mean:6.961,max:86.892,pstdev:12.306,percentiles:{p50:3.308,p75:5.212,p80:5.869,p90:9.026,p95:48.003,p99:54.798,p999:66.111}},resources:{envoyGateway:{memory:{min:154.38,max:165.47,mean:160.87},cpu:{min:.47,max:15.86,mean:2.17}},envoyProxy:{memory:{min:60.36,max:80.61,mean:78.16},cpu:{min:0,max:62.38,mean:1.78}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:151627,perSecond:5054.22},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:23805439,perSecond:793512.74},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6824880,perSecond:227495.46},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:151664,perSecond:5055.45}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:4876.52,totalRequests:146296,latency:{min:.389,mean:7.785,max:105.218,pstdev:13.242,percentiles:{p50:3.631,p75:5.918,p80:6.77,p90:11.637,p95:49.168,p99:58.429,p999:73.142}},resources:{envoyGateway:{memory:{min:174.48,max:189.18,mean:185.55},cpu:{min:.53,max:33.87,mean:3.98}},envoyProxy:{memory:{min:80.41,max:130.98,mean:125.04},cpu:{min:0,max:100.22,mean:10.6}}},poolOverflow:360,upstreamConnections:40,counters:{"benchmark.http_2xx":{value:146296,perSecond:4876.52},"benchmark.pool_overflow":{value:360,perSecond:12},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:40,perSecond:1.33},upstream_cx_rx_bytes_total:{value:22968472,perSecond:765614.39},upstream_cx_total:{value:40,perSecond:1.33},upstream_cx_tx_bytes_total:{value:6585120,perSecond:219503.61},upstream_rq_pending_overflow:{value:360,perSecond:12},upstream_rq_pending_total:{value:40,perSecond:1.33},upstream_rq_total:{value:146336,perSecond:4877.86}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5174,totalRequests:155220,latency:{min:.383,mean:6.982,max:84.951,pstdev:12.4,percentiles:{p50:3.264,p75:5.191,p80:5.851,p90:9.111,p95:48.539,p99:55.015,p999:61.159}},resources:{envoyGateway:{memory:{min:200.76,max:209.96,mean:204},cpu:{min:.67,max:3.2,mean:1}},envoyProxy:{memory:{min:124.56,max:124.95,mean:124.66},cpu:{min:0,max:100.02,mean:10.45}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:155220,perSecond:5174},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24369540,perSecond:812318.7},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6986610,perSecond:232887.2},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:155258,perSecond:5175.27}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5131.76,totalRequests:153955,latency:{min:.379,mean:7.003,max:69.431,pstdev:12.325,percentiles:{p50:3.309,p75:5.217,p80:5.892,p90:9.196,p95:48.388,p99:54.595,p999:59.465}},resources:{envoyGateway:{memory:{min:180.64,max:210.23,mean:203.47},cpu:{min:.67,max:4.47,mean:1.1}},envoyProxy:{memory:{min:124.54,max:124.73,mean:124.6},cpu:{min:0,max:100.06,mean:15.33}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:153955,perSecond:5131.76},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24170935,perSecond:805685.76},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6929505,perSecond:230980.04},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:153989,perSecond:5132.89}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5135.4,totalRequests:154068,latency:{min:.389,mean:6.84,max:90.39,pstdev:12.116,percentiles:{p50:3.218,p75:5.12,p80:5.774,p90:8.987,p95:47.542,p99:54.333,p999:60.504}},resources:{envoyGateway:{memory:{min:145.4,max:167.27,mean:150.39},cpu:{min:.67,max:9.6,mean:1.6}},envoyProxy:{memory:{min:124.55,max:132.84,mean:125.87},cpu:{min:0,max:35.79,mean:1.32}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:154068,perSecond:5135.4},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24188676,perSecond:806257.2},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6934455,perSecond:231139.33},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:154099,perSecond:5136.43}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:4805.71,totalRequests:144106,latency:{min:.355,mean:3.755,max:71.278,pstdev:8.613,percentiles:{p50:1.813,p75:2.693,p80:2.987,p90:4.022,p95:6.251,p99:48.558,p999:53.964}},resources:{envoyGateway:{memory:{min:158.2,max:168.5,mean:160.29},cpu:{min:.73,max:11,mean:1.76}},envoyProxy:{memory:{min:132.83,max:132.92,mean:132.86},cpu:{min:0,max:99.81,mean:5.92}}},poolOverflow:381,upstreamConnections:19,counters:{"benchmark.http_2xx":{value:144106,perSecond:4805.71},"benchmark.pool_overflow":{value:381,perSecond:12.71},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:19,perSecond:.63},upstream_cx_rx_bytes_total:{value:22624642,perSecond:754496.28},upstream_cx_total:{value:19,perSecond:.63},upstream_cx_tx_bytes_total:{value:6485625,perSecond:216285.41},upstream_rq_pending_overflow:{value:381,perSecond:12.71},upstream_rq_pending_total:{value:19,perSecond:.63},upstream_rq_total:{value:144125,perSecond:4806.34}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:4995.81,totalRequests:149876,latency:{min:.356,mean:6.955,max:102.629,pstdev:12.066,percentiles:{p50:3.365,p75:5.296,p80:5.991,p90:9.226,p95:46.753,p99:54.145,p999:65.548}},resources:{envoyGateway:{memory:{min:164.96,max:189.18,mean:168.91},cpu:{min:.47,max:22.33,mean:2.82}},envoyProxy:{memory:{min:130.84,max:133.12,mean:132.79},cpu:{min:0,max:99.83,mean:13.53}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:149876,perSecond:4995.81},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:23530532,perSecond:784342.88},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6746085,perSecond:224867.15},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:149913,perSecond:4997.05}}}]},see={metadata:{version:"1.5.4",runId:"1.5.4-1763692939320",date:"2025-11-21T02:42:19.320Z",environment:"GitHub CI",description:"Benchmark results for version 1.5.4",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5261.72,totalRequests:157854,latency:{min:.386,mean:6.996,max:92.798,pstdev:11.423,percentiles:{p50:3.467,p75:5.796,p80:6.627,p90:10.95,p95:42.975,p99:53.62,p999:61.476}},resources:{envoyGateway:{memory:{min:112.64,max:132.9,mean:127.62},cpu:{min:.13,max:1.13,mean:.44}},envoyProxy:{memory:{min:0,max:26.89,mean:22.19},cpu:{min:0,max:99.78,mean:11.73}}},poolOverflow:361,upstreamConnections:39,counters:{"benchmark.http_2xx":{value:157854,perSecond:5261.72},"benchmark.pool_overflow":{value:361,perSecond:12.03},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:39,perSecond:1.3},upstream_cx_rx_bytes_total:{value:24783078,perSecond:826090.43},upstream_cx_total:{value:39,perSecond:1.3},upstream_cx_tx_bytes_total:{value:7104105,perSecond:236800.01},upstream_rq_pending_overflow:{value:361,perSecond:12.03},upstream_rq_pending_total:{value:39,perSecond:1.3},upstream_rq_total:{value:157869,perSecond:5262.22}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5190.53,totalRequests:155722,latency:{min:.387,mean:6.792,max:87.822,pstdev:11.838,percentiles:{p50:3.189,p75:5.155,p80:5.868,p90:9.62,p95:45.627,p99:53.573,p999:62.234}},resources:{envoyGateway:{memory:{min:132.9,max:142.34,mean:138.63},cpu:{min:.27,max:4.4,mean:.84}},envoyProxy:{memory:{min:26.59,max:30.92,mean:30.2},cpu:{min:0,max:100.03,mean:11.03}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:155722,perSecond:5190.53},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24448354,perSecond:814913.58},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7008300,perSecond:233600.96},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:155740,perSecond:5191.13}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5212.86,totalRequests:156386,latency:{min:.374,mean:7.452,max:85.016,pstdev:12.613,percentiles:{p50:3.453,p75:5.808,p80:6.677,p90:11.296,p95:47.863,p99:55.584,p999:64.251}},resources:{envoyGateway:{memory:{min:136.62,max:139.78,mean:139},cpu:{min:.33,max:4.87,mean:.94}},envoyProxy:{memory:{min:30.65,max:37.21,mean:36.32},cpu:{min:0,max:46.44,mean:1.81}}},poolOverflow:359,upstreamConnections:41,counters:{"benchmark.http_2xx":{value:156386,perSecond:5212.86},"benchmark.pool_overflow":{value:359,perSecond:11.97},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:41,perSecond:1.37},upstream_cx_rx_bytes_total:{value:24552602,perSecond:818418.84},upstream_cx_total:{value:41,perSecond:1.37},upstream_cx_tx_bytes_total:{value:7039215,perSecond:234640.15},upstream_rq_pending_overflow:{value:359,perSecond:11.97},upstream_rq_pending_total:{value:41,perSecond:1.37},upstream_rq_total:{value:156427,perSecond:5214.23}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5198.93,totalRequests:155968,latency:{min:.381,mean:6.749,max:77.881,pstdev:11.891,percentiles:{p50:3.164,p75:5.134,p80:5.828,p90:9.403,p95:46.28,p99:54.018,p999:64.313}},resources:{envoyGateway:{memory:{min:139.78,max:155.04,mean:152.03},cpu:{min:.4,max:20.87,mean:2.55}},envoyProxy:{memory:{min:36.77,max:59.16,mean:55.93},cpu:{min:0,max:99.96,mean:4.33}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:155968,perSecond:5198.93},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24486976,perSecond:816232},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7020225,perSecond:234007.35},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:156005,perSecond:5200.16}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5176.03,totalRequests:155281,latency:{min:.387,mean:6.938,max:113.328,pstdev:12.104,percentiles:{p50:3.172,p75:5.303,p80:6.058,p90:10.265,p95:46.184,p99:54.487,p999:67.004}},resources:{envoyGateway:{memory:{min:151.23,max:165.62,mean:162.13},cpu:{min:.4,max:19.13,mean:2.41}},envoyProxy:{memory:{min:58.96,max:79.86,mean:77.36},cpu:{min:0,max:100.12,mean:7.47}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:155281,perSecond:5176.03},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24379117,perSecond:812636.63},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6989355,perSecond:232978.33},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:155319,perSecond:5177.3}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5137,totalRequests:154113,latency:{min:.359,mean:8.124,max:101.47,pstdev:13.23,percentiles:{p50:3.824,p75:6.312,p80:7.277,p90:13.76,p95:48.394,p99:58.728,p999:70.451}},resources:{envoyGateway:{memory:{min:189.07,max:235.64,mean:194.15},cpu:{min:.47,max:33.73,mean:5.63}},envoyProxy:{memory:{min:79.22,max:135.98,mean:130.13},cpu:{min:0,max:99.94,mean:11.21}}},poolOverflow:356,upstreamConnections:44,counters:{"benchmark.http_2xx":{value:154113,perSecond:5137},"benchmark.pool_overflow":{value:356,perSecond:11.87},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:44,perSecond:1.47},upstream_cx_rx_bytes_total:{value:24195741,perSecond:806508.95},upstream_cx_total:{value:44,perSecond:1.47},upstream_cx_tx_bytes_total:{value:6936390,perSecond:231208.49},upstream_rq_pending_overflow:{value:356,perSecond:11.87},upstream_rq_pending_total:{value:44,perSecond:1.47},upstream_rq_total:{value:154142,perSecond:5137.97}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5329.16,totalRequests:159878,latency:{min:.376,mean:6.806,max:98.381,pstdev:11.627,percentiles:{p50:3.31,p75:5.297,p80:6.029,p90:9.46,p95:45.32,p99:52.797,p999:59.246}},resources:{envoyGateway:{memory:{min:165.02,max:216.97,mean:203.73},cpu:{min:.6,max:3.13,mean:1.01}},envoyProxy:{memory:{min:128.97,max:129.21,mean:129.1},cpu:{min:0,max:52.71,mean:5.05}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:159878,perSecond:5329.16},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25100846,perSecond:836678.51},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7195860,perSecond:239857.31},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:159908,perSecond:5330.16}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5287.65,totalRequests:158634,latency:{min:.358,mean:7.578,max:118.231,pstdev:12.572,percentiles:{p50:3.603,p75:5.831,p80:6.664,p90:11.794,p95:47.65,p99:55.255,p999:65.124}},resources:{envoyGateway:{memory:{min:143.82,max:154.45,mean:146.42},cpu:{min:.6,max:4.47,mean:1.17}},envoyProxy:{memory:{min:128.95,max:129.23,mean:129.05},cpu:{min:0,max:100.12,mean:16.99}}},poolOverflow:358,upstreamConnections:42,counters:{"benchmark.http_2xx":{value:158634,perSecond:5287.65},"benchmark.pool_overflow":{value:358,perSecond:11.93},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:42,perSecond:1.4},upstream_cx_rx_bytes_total:{value:24905538,perSecond:830160.73},upstream_cx_total:{value:42,perSecond:1.4},upstream_cx_tx_bytes_total:{value:7139250,perSecond:237968.16},upstream_rq_pending_overflow:{value:358,perSecond:11.93},upstream_rq_pending_total:{value:42,perSecond:1.4},upstream_rq_total:{value:158650,perSecond:5288.18}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5182.59,totalRequests:155481,latency:{min:.39,mean:6.947,max:95.182,pstdev:11.994,percentiles:{p50:3.23,p75:5.374,p80:6.156,p90:10.277,p95:46.147,p99:53.874,p999:64.235}},resources:{envoyGateway:{memory:{min:144.34,max:159.4,mean:150.23},cpu:{min:.53,max:12.73,mean:1.84}},envoyProxy:{memory:{min:128.98,max:135.66,mean:129.5},cpu:{min:0,max:100,mean:14.54}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:155481,perSecond:5182.59},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24410517,perSecond:813667.08},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6998130,perSecond:233266.18},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:155514,perSecond:5183.69}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5243.55,totalRequests:157311,latency:{min:.377,mean:6.697,max:79.204,pstdev:11.447,percentiles:{p50:3.25,p75:5.266,p80:5.976,p90:9.577,p95:44.281,p99:52.84,p999:63.244}},resources:{envoyGateway:{memory:{min:149.68,max:165.16,mean:156.89},cpu:{min:.53,max:13.46,mean:2.24}},envoyProxy:{memory:{min:135.65,max:135.89,mean:135.73},cpu:{min:0,max:99.96,mean:14.81}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:157311,perSecond:5243.55},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24697827,perSecond:823237.67},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7080075,perSecond:235995.84},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:157335,perSecond:5244.35}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:4881.7,totalRequests:146451,latency:{min:.364,mean:5.04,max:106.377,pstdev:10.078,percentiles:{p50:2.332,p75:3.922,p80:4.464,p90:6.588,p95:31.911,p99:50.827,p999:62.269}},resources:{envoyGateway:{memory:{min:158.79,max:189.29,mean:167.36},cpu:{min:.53,max:37.46,mean:4.26}},envoyProxy:{memory:{min:135.64,max:136.08,mean:135.74},cpu:{min:0,max:98.66,mean:11.59}}},poolOverflow:374,upstreamConnections:26,counters:{"benchmark.http_2xx":{value:146451,perSecond:4881.7},"benchmark.pool_overflow":{value:374,perSecond:12.47},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:26,perSecond:.87},upstream_cx_rx_bytes_total:{value:22992807,perSecond:766426.81},upstream_cx_total:{value:26,perSecond:.87},upstream_cx_tx_bytes_total:{value:6591465,perSecond:219715.47},upstream_rq_pending_overflow:{value:374,perSecond:12.47},upstream_rq_pending_total:{value:26,perSecond:.87},upstream_rq_total:{value:146477,perSecond:4882.57}}}]},uee={metadata:{version:"1.5.3",runId:"1.5.3-1763692934477",date:"2025-11-21T02:42:14.477Z",environment:"GitHub CI",description:"Benchmark results for version 1.5.3",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5307.12,totalRequests:159214,latency:{min:.355,mean:8.822,max:84.43,pstdev:13.817,percentiles:{p50:4.302,p75:7.114,p80:8.131,p90:15.852,p95:50.37,p99:56.598,p999:62.789}},resources:{envoyGateway:{memory:{min:108.98,max:135.71,mean:131.81},cpu:{min:.13,max:.93,mean:.44}},envoyProxy:{memory:{min:0,max:27.21,mean:22.38},cpu:{min:0,max:100.07,mean:7.4}}},poolOverflow:350,upstreamConnections:50,counters:{"benchmark.http_2xx":{value:159214,perSecond:5307.12},"benchmark.pool_overflow":{value:350,perSecond:11.67},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:50,perSecond:1.67},upstream_cx_rx_bytes_total:{value:24996598,perSecond:833217.57},upstream_cx_total:{value:50,perSecond:1.67},upstream_cx_tx_bytes_total:{value:7166880,perSecond:238895.32},upstream_rq_pending_overflow:{value:350,perSecond:11.67},upstream_rq_pending_total:{value:50,perSecond:1.67},upstream_rq_total:{value:159264,perSecond:5308.78}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5208.91,totalRequests:156270,latency:{min:.362,mean:6.755,max:82.063,pstdev:12.17,percentiles:{p50:3.138,p75:4.998,p80:5.665,p90:8.703,p95:48.013,p99:54.568,p999:60.248}},resources:{envoyGateway:{memory:{min:135.71,max:146.09,mean:142.6},cpu:{min:.33,max:3.93,mean:.8}},envoyProxy:{memory:{min:26.76,max:30.96,mean:30.48},cpu:{min:0,max:99.94,mean:4.65}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:156270,perSecond:5208.91},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24534390,perSecond:817799.54},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7033635,perSecond:234450.64},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:156303,perSecond:5210.01}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5217.66,totalRequests:156530,latency:{min:.386,mean:7.652,max:99.11,pstdev:13.119,percentiles:{p50:3.49,p75:5.773,p80:6.596,p90:11.249,p95:49.59,p99:56.573,p999:64.243}},resources:{envoyGateway:{memory:{min:141.46,max:152.33,mean:150.33},cpu:{min:.4,max:5.93,mean:1.05}},envoyProxy:{memory:{min:30.82,max:37.48,mean:36.09},cpu:{min:0,max:92.26,mean:1.94}}},poolOverflow:358,upstreamConnections:42,counters:{"benchmark.http_2xx":{value:156530,perSecond:5217.66},"benchmark.pool_overflow":{value:358,perSecond:11.93},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:42,perSecond:1.4},upstream_cx_rx_bytes_total:{value:24575210,perSecond:819172.58},upstream_cx_total:{value:42,perSecond:1.4},upstream_cx_tx_bytes_total:{value:7045740,perSecond:234857.69},upstream_rq_pending_overflow:{value:358,perSecond:11.93},upstream_rq_pending_total:{value:42,perSecond:1.4},upstream_rq_total:{value:156572,perSecond:5219.06}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5120.99,totalRequests:153632,latency:{min:.363,mean:7.027,max:92.614,pstdev:12.387,percentiles:{p50:3.32,p75:5.314,p80:6.018,p90:9.487,p95:48.113,p99:54.697,p999:63.485}},resources:{envoyGateway:{memory:{min:146.21,max:154.59,mean:152.49},cpu:{min:.4,max:22.79,mean:3.29}},envoyProxy:{memory:{min:36.96,max:59.15,mean:54.38},cpu:{min:0,max:1.28,mean:.03}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:153632,perSecond:5120.99},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24120224,perSecond:803994.95},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6915015,perSecond:230496.91},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:153667,perSecond:5122.15}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5080.76,totalRequests:152425,latency:{min:.375,mean:7.037,max:95.44,pstdev:12.408,percentiles:{p50:3.346,p75:5.267,p80:5.929,p90:9.267,p95:48.084,p99:55.326,p999:65.15}},resources:{envoyGateway:{memory:{min:152.76,max:168.61,mean:164.59},cpu:{min:.47,max:22.2,mean:2.76}},envoyProxy:{memory:{min:59.11,max:79.46,mean:77.33},cpu:{min:0,max:100.07,mean:8.55}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:152425,perSecond:5080.76},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:23930725,perSecond:797679.97},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6860790,perSecond:228689.89},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:152462,perSecond:5082}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5007.79,totalRequests:150239,latency:{min:.379,mean:7.327,max:121.139,pstdev:12.913,percentiles:{p50:3.33,p75:5.423,p80:6.152,p90:10.043,p95:48.586,p99:56.95,p999:69.328}},resources:{envoyGateway:{memory:{min:162.51,max:197.73,mean:192.58},cpu:{min:.47,max:54.6,mean:7.15}},envoyProxy:{memory:{min:99.33,max:135.09,mean:131.17},cpu:{min:0,max:47.18,mean:5.45}}},poolOverflow:361,upstreamConnections:39,counters:{"benchmark.http_2xx":{value:150239,perSecond:5007.79},"benchmark.pool_overflow":{value:361,perSecond:12.03},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:39,perSecond:1.3},upstream_cx_rx_bytes_total:{value:23587523,perSecond:786223.43},upstream_cx_total:{value:39,perSecond:1.3},upstream_cx_tx_bytes_total:{value:6761970,perSecond:225391.16},upstream_rq_pending_overflow:{value:361,perSecond:12.03},upstream_rq_pending_total:{value:39,perSecond:1.3},upstream_rq_total:{value:150266,perSecond:5008.69}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5202.6,totalRequests:156078,latency:{min:.396,mean:6.739,max:69.812,pstdev:12.158,percentiles:{p50:3.166,p75:5.022,p80:5.647,p90:8.593,p95:48.123,p99:54.417,p999:59.23}},resources:{envoyGateway:{memory:{min:137.63,max:148.54,mean:142.77},cpu:{min:.6,max:3.27,mean:.98}},envoyProxy:{memory:{min:121.41,max:121.58,mean:121.45},cpu:{min:0,max:98.16,mean:12.67}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:156078,perSecond:5202.6},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24504246,perSecond:816807.83},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7025175,perSecond:234172.39},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:156115,perSecond:5203.83}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5206.36,totalRequests:156191,latency:{min:.374,mean:6.733,max:75.362,pstdev:12.051,percentiles:{p50:3.238,p75:5.085,p80:5.693,p90:8.505,p95:48.011,p99:54.202,p999:59.555}},resources:{envoyGateway:{memory:{min:144.43,max:147.82,mean:145.9},cpu:{min:.6,max:4.27,mean:1.06}},envoyProxy:{memory:{min:121.41,max:121.54,mean:121.45},cpu:{min:0,max:96.17,mean:7.55}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:156191,perSecond:5206.36},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24521987,perSecond:817398.06},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7030260,perSecond:234341.57},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:156228,perSecond:5207.59}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5249.49,totalRequests:157487,latency:{min:.372,mean:6.913,max:72.269,pstdev:12.304,percentiles:{p50:3.269,p75:5.099,p80:5.722,p90:8.753,p95:48.592,p99:54.806,p999:61.022}},resources:{envoyGateway:{memory:{min:143.72,max:159.16,mean:149.43},cpu:{min:.6,max:13.4,mean:2.26}},envoyProxy:{memory:{min:121.41,max:135.12,mean:123.41},cpu:{min:0,max:100.04,mean:4.96}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:157487,perSecond:5249.49},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24725459,perSecond:824169.93},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7087770,perSecond:236255.55},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:157506,perSecond:5250.12}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5094.86,totalRequests:152846,latency:{min:.37,mean:6.845,max:83.345,pstdev:12.159,percentiles:{p50:3.146,p75:5.469,p80:6.243,p90:9.495,p95:47.437,p99:54.419,p999:64.133}},resources:{envoyGateway:{memory:{min:151.69,max:164.31,mean:158.32},cpu:{min:.67,max:14.33,mean:2.06}},envoyProxy:{memory:{min:135.06,max:135.27,mean:135.13},cpu:{min:0,max:83.56,mean:4.59}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:152846,perSecond:5094.86},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:23996822,perSecond:799893.07},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6879735,perSecond:229324.21},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:152883,perSecond:5096.09}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5119.62,totalRequests:153596,latency:{min:.38,mean:6.992,max:88.113,pstdev:12.19,percentiles:{p50:3.336,p75:5.257,p80:5.945,p90:9.203,p95:47.157,p99:54.669,p999:65.861}},resources:{envoyGateway:{memory:{min:162.61,max:197.09,mean:168.15},cpu:{min:.53,max:33.8,mean:3.91}},envoyProxy:{memory:{min:135.07,max:135.25,mean:135.12},cpu:{min:0,max:63.39,mean:1.52}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:153596,perSecond:5119.62},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24114572,perSecond:803779.88},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6913125,perSecond:230426.27},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:153625,perSecond:5120.58}}}]},lee={metadata:{version:"1.5.2",runId:"1.5.2-1763692921166",date:"2025-11-21T02:42:01.166Z",environment:"GitHub CI",description:"Benchmark results for version 1.5.2",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5479.08,totalRequests:164373,latency:{min:.366,mean:6.532,max:64.706,pstdev:11.722,percentiles:{p50:3.191,p75:4.876,p80:5.443,p90:7.921,p95:46.766,p99:52.94,p999:57.231}},resources:{envoyGateway:{memory:{min:110.08,max:139.07,mean:132.64},cpu:{min:.2,max:.93,mean:.4}},envoyProxy:{memory:{min:0,max:28.59,mean:23.78},cpu:{min:0,max:99.89,mean:2.4}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:164373,perSecond:5479.08},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25806561,perSecond:860215.71},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7398495,perSecond:246615.64},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:164411,perSecond:5480.35}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5461.8,totalRequests:163860,latency:{min:.384,mean:7.323,max:82.927,pstdev:12.697,percentiles:{p50:3.499,p75:5.538,p80:6.239,p90:9.715,p95:49.223,p99:55.181,p999:60.008}},resources:{envoyGateway:{memory:{min:131.13,max:142.86,mean:141.65},cpu:{min:.27,max:3.87,mean:.86}},envoyProxy:{memory:{min:28.2,max:34.74,mean:33.02},cpu:{min:0,max:41.44,mean:1.79}}},poolOverflow:358,upstreamConnections:42,counters:{"benchmark.http_2xx":{value:163860,perSecond:5461.8},"benchmark.pool_overflow":{value:358,perSecond:11.93},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:42,perSecond:1.4},upstream_cx_rx_bytes_total:{value:25726020,perSecond:857502.4},upstream_cx_total:{value:42,perSecond:1.4},upstream_cx_tx_bytes_total:{value:7375050,perSecond:245825.94},upstream_rq_pending_overflow:{value:358,perSecond:11.93},upstream_rq_pending_total:{value:42,perSecond:1.4},upstream_rq_total:{value:163890,perSecond:5462.8}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5433.86,totalRequests:163016,latency:{min:.367,mean:6.464,max:72.536,pstdev:11.843,percentiles:{p50:3.031,p75:4.849,p80:5.481,p90:8.285,p95:47.396,p99:54.114,p999:59.86}},resources:{envoyGateway:{memory:{min:137.43,max:141.93,mean:140.64},cpu:{min:.33,max:5.67,mean:.99}},envoyProxy:{memory:{min:34.36,max:38.81,mean:38.03},cpu:{min:0,max:99.75,mean:9.06}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:163016,perSecond:5433.86},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:25593512,perSecond:853116.28},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7337385,perSecond:244579.28},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:163053,perSecond:5435.1}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5397.08,totalRequests:161912,latency:{min:.38,mean:6.525,max:93.134,pstdev:11.997,percentiles:{p50:3.053,p75:4.818,p80:5.4,p90:8.07,p95:47.677,p99:54.564,p999:64.092}},resources:{envoyGateway:{memory:{min:141.93,max:154.43,mean:152.12},cpu:{min:.4,max:19.33,mean:2.39}},envoyProxy:{memory:{min:38.43,max:60.61,mean:58.95},cpu:{min:0,max:92.48,mean:10.62}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:161912,perSecond:5397.08},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:25420184,perSecond:847341.13},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7287660,perSecond:242922.48},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:161948,perSecond:5398.28}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5346.58,totalRequests:160402,latency:{min:.373,mean:6.79,max:103.403,pstdev:12.301,percentiles:{p50:3.153,p75:4.996,p80:5.626,p90:8.574,p95:48.115,p99:55.238,p999:65.812}},resources:{envoyGateway:{memory:{min:154.42,max:166.59,mean:163.3},cpu:{min:.47,max:20.73,mean:2.56}},envoyProxy:{memory:{min:60.58,max:83.01,mean:80.07},cpu:{min:0,max:95.15,mean:8.57}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:160402,perSecond:5346.58},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25183114,perSecond:839413.75},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7219395,perSecond:240639.8},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:160431,perSecond:5347.55}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5218.06,totalRequests:156544,latency:{min:.367,mean:6.719,max:84.127,pstdev:12.353,percentiles:{p50:3.065,p75:4.893,p80:5.543,p90:8.557,p95:47.892,p99:56.375,p999:67.162}},resources:{envoyGateway:{memory:{min:161.57,max:194.59,mean:189.96},cpu:{min:.47,max:49.87,mean:5.41}},envoyProxy:{memory:{min:82.7,max:128.93,mean:125.62},cpu:{min:0,max:99.38,mean:16.19}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:156544,perSecond:5218.06},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24577408,perSecond:819234.78},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7045605,perSecond:234850.02},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:156569,perSecond:5218.89}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5387.19,totalRequests:161616,latency:{min:.364,mean:6.542,max:91.033,pstdev:12.047,percentiles:{p50:3.028,p75:4.823,p80:5.436,p90:8.323,p95:47.945,p99:54.667,p999:61.505}},resources:{envoyGateway:{memory:{min:196.85,max:204.68,mean:200.34},cpu:{min:.6,max:3.73,mean:1.01}},envoyProxy:{memory:{min:124.9,max:125.1,mean:124.96},cpu:{min:0,max:97.82,mean:1.97}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:161616,perSecond:5387.19},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:25373712,perSecond:845789.02},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7274385,perSecond:242479.1},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:161653,perSecond:5388.42}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5377.52,totalRequests:161329,latency:{min:.353,mean:6.666,max:69.062,pstdev:11.937,percentiles:{p50:3.235,p75:5.004,p80:5.575,p90:8.05,p95:47.345,p99:53.839,p999:59.277}},resources:{envoyGateway:{memory:{min:167.66,max:204.68,mean:198.45},cpu:{min:.6,max:5,mean:1.14}},envoyProxy:{memory:{min:124.91,max:126.91,mean:125.07},cpu:{min:0,max:99.99,mean:12.3}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:161329,perSecond:5377.52},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25328653,perSecond:844270.8},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7261290,perSecond:242037.94},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:161362,perSecond:5378.62}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5263.08,totalRequests:157896,latency:{min:.379,mean:7.049,max:80.699,pstdev:12.535,percentiles:{p50:3.279,p75:5.204,p80:5.879,p90:9.138,p95:48.818,p99:55.332,p999:61.927}},resources:{envoyGateway:{memory:{min:144,max:167.66,mean:149.36},cpu:{min:.67,max:12,mean:1.82}},envoyProxy:{memory:{min:126.91,max:134.89,mean:127.6},cpu:{min:0,max:68.16,mean:6.71}}},poolOverflow:361,upstreamConnections:39,counters:{"benchmark.http_2xx":{value:157896,perSecond:5263.08},"benchmark.pool_overflow":{value:361,perSecond:12.03},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:39,perSecond:1.3},upstream_cx_rx_bytes_total:{value:24789672,perSecond:826303.92},upstream_cx_total:{value:39,perSecond:1.3},upstream_cx_tx_bytes_total:{value:7106580,perSecond:236880.7},upstream_rq_pending_overflow:{value:361,perSecond:12.03},upstream_rq_pending_total:{value:39,perSecond:1.3},upstream_rq_total:{value:157924,perSecond:5264.02}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5316.8,totalRequests:159506,latency:{min:.359,mean:6.962,max:81.219,pstdev:12.393,percentiles:{p50:3.266,p75:5.154,p80:5.83,p90:8.94,p95:48.343,p99:55.275,p999:64.294}},resources:{envoyGateway:{memory:{min:157.35,max:161.75,mean:158.67},cpu:{min:.67,max:11.27,mean:2}},envoyProxy:{memory:{min:134.9,max:135.31,mean:135.02},cpu:{min:0,max:100.09,mean:13.37}}},poolOverflow:361,upstreamConnections:39,counters:{"benchmark.http_2xx":{value:159506,perSecond:5316.8},"benchmark.pool_overflow":{value:361,perSecond:12.03},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:39,perSecond:1.3},upstream_cx_rx_bytes_total:{value:25042442,perSecond:834736.89},upstream_cx_total:{value:39,perSecond:1.3},upstream_cx_tx_bytes_total:{value:7179075,perSecond:239299.3},upstream_rq_pending_overflow:{value:361,perSecond:12.03},upstream_rq_pending_total:{value:39,perSecond:1.3},upstream_rq_total:{value:159535,perSecond:5317.76}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5381.7,totalRequests:161451,latency:{min:.351,mean:6.541,max:88.997,pstdev:12.071,percentiles:{p50:3.074,p75:4.769,p80:5.326,p90:7.898,p95:47.615,p99:54.716,p999:65.511}},resources:{envoyGateway:{memory:{min:154.82,max:190.15,mean:165.17},cpu:{min:.53,max:33.2,mean:3.85}},envoyProxy:{memory:{min:128.91,max:135.08,mean:134.49},cpu:{min:0,max:99.98,mean:9.01}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:161451,perSecond:5381.7},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:25347807,perSecond:844926.36},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7266960,perSecond:242231.85},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:161488,perSecond:5382.93}}}]},cee={metadata:{version:"1.5.0",runId:"1.5.0-1763692916136",date:"2025-11-21T02:41:56.136Z",environment:"GitHub CI",description:"Benchmark results for version 1.5.0",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5231,totalRequests:156932,latency:{min:.37,mean:7.156,max:72.495,pstdev:12.509,percentiles:{p50:3.426,p75:5.422,p80:6.073,p90:9.416,p95:48.619,p99:54.312,p999:58.814}},resources:{envoyGateway:{memory:{min:111.95,max:137.44,mean:132.26},cpu:{min:.13,max:1.13,mean:.45}},envoyProxy:{memory:{min:0,max:27.53,mean:21.99},cpu:{min:0,max:99.97,mean:7.47}}},poolOverflow:360,upstreamConnections:40,counters:{"benchmark.http_2xx":{value:156932,perSecond:5231},"benchmark.pool_overflow":{value:360,perSecond:12},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:40,perSecond:1.33},upstream_cx_rx_bytes_total:{value:24638324,perSecond:821267.28},upstream_cx_total:{value:40,perSecond:1.33},upstream_cx_tx_bytes_total:{value:7063470,perSecond:235446.08},upstream_rq_pending_overflow:{value:360,perSecond:12},upstream_rq_pending_total:{value:40,perSecond:1.33},upstream_rq_total:{value:156966,perSecond:5232.14}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5284.46,totalRequests:158534,latency:{min:.375,mean:7.325,max:70.68,pstdev:12.639,percentiles:{p50:3.504,p75:5.444,p80:6.115,p90:9.472,p95:48.904,p99:55.166,p999:60.913}},resources:{envoyGateway:{memory:{min:137.04,max:147.84,mean:140.78},cpu:{min:.33,max:4,mean:.81}},envoyProxy:{memory:{min:27.38,max:31.86,mean:31.1},cpu:{min:0,max:77.81,mean:4.21}}},poolOverflow:359,upstreamConnections:41,counters:{"benchmark.http_2xx":{value:158534,perSecond:5284.46},"benchmark.pool_overflow":{value:359,perSecond:11.97},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:41,perSecond:1.37},upstream_cx_rx_bytes_total:{value:24889838,perSecond:829660.38},upstream_cx_total:{value:41,perSecond:1.37},upstream_cx_tx_bytes_total:{value:7135875,perSecond:237862.25},upstream_rq_pending_overflow:{value:359,perSecond:11.97},upstream_rq_pending_total:{value:41,perSecond:1.37},upstream_rq_total:{value:158575,perSecond:5285.83}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5245.7,totalRequests:157371,latency:{min:.393,mean:7.594,max:95.199,pstdev:12.997,percentiles:{p50:3.589,p75:5.678,p80:6.423,p90:10.334,p95:49.883,p99:56.033,p999:61.966}},resources:{envoyGateway:{memory:{min:140.89,max:158.13,mean:147.17},cpu:{min:.33,max:5.13,mean:.98}},envoyProxy:{memory:{min:31.43,max:37.71,mean:37.04},cpu:{min:0,max:19.93,mean:1.95}}},poolOverflow:358,upstreamConnections:42,counters:{"benchmark.http_2xx":{value:157371,perSecond:5245.7},"benchmark.pool_overflow":{value:358,perSecond:11.93},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:42,perSecond:1.4},upstream_cx_rx_bytes_total:{value:24707247,perSecond:823574.27},upstream_cx_total:{value:42,perSecond:1.4},upstream_cx_tx_bytes_total:{value:7083585,perSecond:236119.32},upstream_rq_pending_overflow:{value:358,perSecond:11.93},upstream_rq_pending_total:{value:42,perSecond:1.4},upstream_rq_total:{value:157413,perSecond:5247.1}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5168.17,totalRequests:155048,latency:{min:.375,mean:6.991,max:103.972,pstdev:12.378,percentiles:{p50:3.286,p75:5.28,p80:5.974,p90:9.296,p95:48.189,p99:55.103,p999:64.542}},resources:{envoyGateway:{memory:{min:148.22,max:156.47,mean:153.66},cpu:{min:.47,max:16.07,mean:2.08}},envoyProxy:{memory:{min:37.69,max:60.02,mean:57.65},cpu:{min:0,max:99.73,mean:14.01}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:155048,perSecond:5168.17},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24342536,perSecond:811402.27},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6978780,perSecond:232621.53},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:155084,perSecond:5169.37}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5173.5,totalRequests:155210,latency:{min:.389,mean:6.827,max:83.619,pstdev:12.261,percentiles:{p50:3.164,p75:5.067,p80:5.727,p90:8.965,p95:48.003,p99:54.861,p999:64.55}},resources:{envoyGateway:{memory:{min:160.69,max:181.29,mean:168.42},cpu:{min:.4,max:14.73,mean:2.16}},envoyProxy:{memory:{min:59.88,max:80.35,mean:78.09},cpu:{min:0,max:100.13,mean:17.03}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:155210,perSecond:5173.5},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24367970,perSecond:812239.92},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6985665,perSecond:232848.12},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:155237,perSecond:5174.4}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:4954.6,totalRequests:148639,latency:{min:.362,mean:6.957,max:94.007,pstdev:12.255,percentiles:{p50:3.293,p75:5.279,p80:5.991,p90:9.369,p95:46.555,p99:55.103,p999:68.62}},resources:{envoyGateway:{memory:{min:182.77,max:198.76,mean:195.11},cpu:{min:.47,max:33.07,mean:4.47}},envoyProxy:{memory:{min:112.02,max:136.36,mean:133.37},cpu:{min:0,max:99.75,mean:7.96}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:148639,perSecond:4954.6},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:23336323,perSecond:777871.58},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6689475,perSecond:222980.82},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:148655,perSecond:4955.13}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5243.85,totalRequests:157319,latency:{min:.374,mean:7.087,max:80.916,pstdev:12.384,percentiles:{p50:3.347,p75:5.37,p80:6.082,p90:9.511,p95:48.24,p99:54.714,p999:60.506}},resources:{envoyGateway:{memory:{min:140.18,max:149.41,mean:143.1},cpu:{min:.67,max:3.27,mean:1}},envoyProxy:{memory:{min:127.76,max:127.94,mean:127.82},cpu:{min:0,max:99.8,mean:5.93}}},poolOverflow:361,upstreamConnections:39,counters:{"benchmark.http_2xx":{value:157319,perSecond:5243.85},"benchmark.pool_overflow":{value:361,perSecond:12.03},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:39,perSecond:1.3},upstream_cx_rx_bytes_total:{value:24699083,perSecond:823284.86},upstream_cx_total:{value:39,perSecond:1.3},upstream_cx_tx_bytes_total:{value:7080885,perSecond:236024.37},upstream_rq_pending_overflow:{value:361,perSecond:12.03},upstream_rq_pending_total:{value:39,perSecond:1.3},upstream_rq_total:{value:157353,perSecond:5244.99}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5233.21,totalRequests:157002,latency:{min:.378,mean:6.898,max:74.907,pstdev:12.301,percentiles:{p50:3.22,p75:5.159,p80:5.828,p90:9.039,p95:48.322,p99:54.702,p999:60.03}},resources:{envoyGateway:{memory:{min:145.41,max:151.13,mean:148.35},cpu:{min:.6,max:4.07,mean:1.07}},envoyProxy:{memory:{min:127.77,max:128.41,mean:127.86},cpu:{min:0,max:99.93,mean:8.94}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:157002,perSecond:5233.21},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24649314,perSecond:821613.48},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7066125,perSecond:235528.81},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:157025,perSecond:5233.97}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5193.37,totalRequests:155801,latency:{min:.356,mean:6.97,max:134.422,pstdev:12.396,percentiles:{p50:3.245,p75:5.229,p80:5.909,p90:9.186,p95:48.029,p99:55.148,p999:61.863}},resources:{envoyGateway:{memory:{min:146.94,max:160.41,mean:148.54},cpu:{min:.6,max:9.93,mean:1.66}},envoyProxy:{memory:{min:127.69,max:136.18,mean:127.97},cpu:{min:0,max:99.76,mean:19.75}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:155801,perSecond:5193.37},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24460757,perSecond:815358.63},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7012755,perSecond:233758.52},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:155839,perSecond:5194.63}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5202.79,totalRequests:156086,latency:{min:.363,mean:6.942,max:98.598,pstdev:12.536,percentiles:{p50:3.224,p75:5.05,p80:5.671,p90:8.706,p95:49.022,p99:55.58,p999:66.095}},resources:{envoyGateway:{memory:{min:154.45,max:171.48,mean:159.56},cpu:{min:.53,max:12.73,mean:1.91}},envoyProxy:{memory:{min:136.16,max:136.36,mean:136.23},cpu:{min:0,max:100.08,mean:15.35}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:156086,perSecond:5202.79},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24505502,perSecond:816837.99},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7024770,perSecond:234155.54},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:156106,perSecond:5203.46}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5146.66,totalRequests:154400,latency:{min:.379,mean:6.86,max:92.921,pstdev:12.588,percentiles:{p50:3.144,p75:4.942,p80:5.573,p90:8.615,p95:49.158,p99:56.338,p999:65.662}},resources:{envoyGateway:{memory:{min:161.58,max:194.96,mean:170.05},cpu:{min:.53,max:23.73,mean:2.99}},envoyProxy:{memory:{min:136.16,max:136.35,mean:136.22},cpu:{min:0,max:100.09,mean:6.89}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:154400,perSecond:5146.66},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24240800,perSecond:808025.55},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6949665,perSecond:231655.18},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:154437,perSecond:5147.89}}}]},pee={metadata:{version:"1.4.5",runId:"1.4.5-1763692911330",date:"2025-11-21T02:41:51.330Z",environment:"GitHub CI",description:"Benchmark results for version 1.4.5",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5167.23,totalRequests:155019,latency:{min:.387,mean:7.145,max:169.533,pstdev:11.448,percentiles:{p50:3.498,p75:6.101,p80:7.038,p90:12.18,p95:43.442,p99:52.967,p999:59.131}},resources:{envoyGateway:{memory:{min:131.36,max:156.94,mean:150.91},cpu:{min:.13,max:.93,mean:.47}},envoyProxy:{memory:{min:0,max:27.57,mean:23.8},cpu:{min:0,max:99.86,mean:12.25}}},poolOverflow:360,upstreamConnections:40,counters:{"benchmark.http_2xx":{value:155019,perSecond:5167.23},"benchmark.pool_overflow":{value:360,perSecond:12},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:40,perSecond:1.33},upstream_cx_rx_bytes_total:{value:24337983,perSecond:811254.4},upstream_cx_total:{value:40,perSecond:1.33},upstream_cx_tx_bytes_total:{value:6977115,perSecond:232567.15},upstream_rq_pending_overflow:{value:360,perSecond:12},upstream_rq_pending_total:{value:40,perSecond:1.33},upstream_rq_total:{value:155047,perSecond:5168.16}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5091.12,totalRequests:152734,latency:{min:.325,mean:7.585,max:117.567,pstdev:12.356,percentiles:{p50:3.769,p75:6.053,p80:6.857,p90:11.38,p95:46.624,p99:54.2,p999:60.897}},resources:{envoyGateway:{memory:{min:155.46,max:163.91,mean:163.11},cpu:{min:.33,max:4.67,mean:.93}},envoyProxy:{memory:{min:27.08,max:33.45,mean:32.66},cpu:{min:0,max:99.81,mean:14.11}}},poolOverflow:359,upstreamConnections:41,counters:{"benchmark.http_2xx":{value:152734,perSecond:5091.12},"benchmark.pool_overflow":{value:359,perSecond:11.97},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:41,perSecond:1.37},upstream_cx_rx_bytes_total:{value:23979238,perSecond:799306.01},upstream_cx_total:{value:41,perSecond:1.37},upstream_cx_tx_bytes_total:{value:6874875,perSecond:229161.95},upstream_rq_pending_overflow:{value:359,perSecond:11.97},upstream_rq_pending_total:{value:41,perSecond:1.37},upstream_rq_total:{value:152775,perSecond:5092.49}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5148.71,totalRequests:154464,latency:{min:.364,mean:7.18,max:87.302,pstdev:12.25,percentiles:{p50:3.413,p75:5.598,p80:6.37,p90:10.396,p95:46.991,p99:54.482,p999:63.635}},resources:{envoyGateway:{memory:{min:161.52,max:166.58,mean:165.37},cpu:{min:.4,max:9,mean:1.37}},envoyProxy:{memory:{min:33.15,max:37.81,mean:37.24},cpu:{min:0,max:94.81,mean:11.44}}},poolOverflow:361,upstreamConnections:39,counters:{"benchmark.http_2xx":{value:154464,perSecond:5148.71},"benchmark.pool_overflow":{value:361,perSecond:12.03},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:39,perSecond:1.3},upstream_cx_rx_bytes_total:{value:24250848,perSecond:808347.33},upstream_cx_total:{value:39,perSecond:1.3},upstream_cx_tx_bytes_total:{value:6952410,perSecond:231742.91},upstream_rq_pending_overflow:{value:361,perSecond:12.03},upstream_rq_pending_total:{value:39,perSecond:1.3},upstream_rq_total:{value:154498,perSecond:5149.84}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5157.38,totalRequests:154725,latency:{min:.377,mean:7.029,max:118.747,pstdev:12.31,percentiles:{p50:3.257,p75:5.25,p80:5.989,p90:10.043,p95:47.198,p99:54.951,p999:65.818}},resources:{envoyGateway:{memory:{min:175.42,max:187.87,mean:185.45},cpu:{min:.53,max:81.07,mean:3.8}},envoyProxy:{memory:{min:53.46,max:57.79,mean:57.44},cpu:{min:0,max:99.89,mean:12.24}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:154725,perSecond:5157.38},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24291825,perSecond:809707.91},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6963525,perSecond:232111.88},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:154745,perSecond:5158.04}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5150.77,totalRequests:154527,latency:{min:.381,mean:6.971,max:113.311,pstdev:12.316,percentiles:{p50:3.151,p75:5.206,p80:5.983,p90:10.075,p95:46.688,p99:54.849,p999:68.308}},resources:{envoyGateway:{memory:{min:195.37,max:203.44,mean:200.65},cpu:{min:.13,max:1,mean:.75}},envoyProxy:{memory:{min:73.68,max:79.95,mean:79.06},cpu:{min:0,max:99.82,mean:11.76}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:154527,perSecond:5150.77},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24260739,perSecond:808671.54},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6955065,perSecond:231829.84},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:154557,perSecond:5151.77}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:4819.38,totalRequests:144582,latency:{min:.367,mean:7.667,max:117.051,pstdev:13.071,percentiles:{p50:3.465,p75:5.936,p80:6.838,p90:12.27,p95:47.808,p99:58.836,p999:76.193}},resources:{envoyGateway:{memory:{min:232.1,max:248.36,mean:237.82},cpu:{min:.07,max:1.47,mean:.9}},envoyProxy:{memory:{min:129.97,max:130.7,mean:130.25},cpu:{min:0,max:99.96,mean:10.36}}},poolOverflow:361,upstreamConnections:39,counters:{"benchmark.http_2xx":{value:144582,perSecond:4819.38},"benchmark.pool_overflow":{value:361,perSecond:12.03},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:39,perSecond:1.3},upstream_cx_rx_bytes_total:{value:22699374,perSecond:756642.26},upstream_cx_total:{value:39,perSecond:1.3},upstream_cx_tx_bytes_total:{value:6507945,perSecond:216930.48},upstream_rq_pending_overflow:{value:361,perSecond:12.03},upstream_rq_pending_total:{value:39,perSecond:1.3},upstream_rq_total:{value:144621,perSecond:4820.68}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5020.4,totalRequests:150612,latency:{min:.361,mean:7.165,max:136.364,pstdev:12.568,percentiles:{p50:3.218,p75:5.447,p80:6.252,p90:10.566,p95:48.209,p99:55.255,p999:64.63}},resources:{envoyGateway:{memory:{min:214.58,max:217.58,mean:215.77},cpu:{min:.87,max:4,mean:1.24}},envoyProxy:{memory:{min:127.79,max:128.03,mean:127.91},cpu:{min:0,max:100.06,mean:7.23}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:150612,perSecond:5020.4},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:23646084,perSecond:788202.27},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6779250,perSecond:225974.85},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:150650,perSecond:5021.66}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5156.43,totalRequests:154695,latency:{min:.398,mean:7.756,max:94.031,pstdev:13.474,percentiles:{p50:3.283,p75:5.911,p80:6.883,p90:12.712,p95:50.251,p99:57.212,p999:66.996}},resources:{envoyGateway:{memory:{min:209.45,max:217.88,mean:215.58},cpu:{min:.67,max:7.6,mean:1.57}},envoyProxy:{memory:{min:127.73,max:128.02,mean:127.87},cpu:{min:0,max:99.9,mean:4.75}}},poolOverflow:358,upstreamConnections:42,counters:{"benchmark.http_2xx":{value:154695,perSecond:5156.43},"benchmark.pool_overflow":{value:358,perSecond:11.93},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:42,perSecond:1.4},upstream_cx_rx_bytes_total:{value:24287115,perSecond:809559.74},upstream_cx_total:{value:42,perSecond:1.4},upstream_cx_tx_bytes_total:{value:6963075,perSecond:232099.41},upstream_rq_pending_overflow:{value:358,perSecond:11.93},upstream_rq_pending_total:{value:42,perSecond:1.4},upstream_rq_total:{value:154735,perSecond:5157.76}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5162.75,totalRequests:154884,latency:{min:.391,mean:6.928,max:77.328,pstdev:11.972,percentiles:{p50:3.221,p75:5.293,p80:6.082,p90:10.089,p95:46.329,p99:53.424,p999:61.562}},resources:{envoyGateway:{memory:{min:197.94,max:231.62,mean:219.46},cpu:{min:.73,max:41.4,mean:5.76}},envoyProxy:{memory:{min:127.8,max:128.01,mean:127.89},cpu:{min:0,max:100.13,mean:3.03}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:154884,perSecond:5162.75},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24316788,perSecond:810551.95},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6971445,perSecond:232379.31},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:154921,perSecond:5163.98}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5164.55,totalRequests:154939,latency:{min:.363,mean:6.813,max:123.748,pstdev:12.135,percentiles:{p50:3.132,p75:5.066,p80:5.786,p90:9.349,p95:46.854,p99:55.068,p999:64.952}},resources:{envoyGateway:{memory:{min:186.99,max:214.7,mean:194.88},cpu:{min:.73,max:34.27,mean:4.92}},envoyProxy:{memory:{min:130.14,max:130.62,mean:130.27},cpu:{min:0,max:99.81,mean:11.5}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:154939,perSecond:5164.55},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24325423,perSecond:810834.78},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6972975,perSecond:232428.87},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:154955,perSecond:5165.09}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5000.43,totalRequests:150016,latency:{min:.376,mean:7.369,max:108.912,pstdev:12.666,percentiles:{p50:3.291,p75:5.792,p80:6.722,p90:11.795,p95:47.331,p99:55.957,p999:71.471}},resources:{envoyGateway:{memory:{min:203.55,max:219.59,mean:207.71},cpu:{min:.13,max:1.33,mean:.86}},envoyProxy:{memory:{min:130.13,max:130.42,mean:130.26},cpu:{min:0,max:99.81,mean:13.03}}},poolOverflow:361,upstreamConnections:39,counters:{"benchmark.http_2xx":{value:150016,perSecond:5000.43},"benchmark.pool_overflow":{value:361,perSecond:12.03},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:39,perSecond:1.3},upstream_cx_rx_bytes_total:{value:23552512,perSecond:785068.13},upstream_cx_total:{value:39,perSecond:1.3},upstream_cx_tx_bytes_total:{value:6752160,perSecond:225067.53},upstream_rq_pending_overflow:{value:361,perSecond:12.03},upstream_rq_pending_total:{value:39,perSecond:1.3},upstream_rq_total:{value:150048,perSecond:5001.5}}}]},mee={metadata:{version:"1.4.4",runId:"1.4.4-1763692905323",date:"2025-11-21T02:41:45.323Z",environment:"GitHub CI",description:"Benchmark results for version 1.4.4",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5276.66,totalRequests:158309,latency:{min:.385,mean:7.177,max:74.239,pstdev:12.629,percentiles:{p50:3.424,p75:5.345,p80:6,p90:9.149,p95:49.1,p99:55.275,p999:59.793}},resources:{envoyGateway:{memory:{min:129.45,max:153.16,mean:149.11},cpu:{min:.27,max:.87,mean:.44}},envoyProxy:{memory:{min:0,max:28.43,mean:24.06},cpu:{min:0,max:99.95,mean:9.16}}},poolOverflow:360,upstreamConnections:40,counters:{"benchmark.http_2xx":{value:158309,perSecond:5276.66},"benchmark.pool_overflow":{value:360,perSecond:12},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:40,perSecond:1.33},upstream_cx_rx_bytes_total:{value:24854513,perSecond:828435.92},upstream_cx_total:{value:40,perSecond:1.33},upstream_cx_tx_bytes_total:{value:7125435,perSecond:237500.78},upstream_rq_pending_overflow:{value:360,perSecond:12},upstream_rq_pending_total:{value:40,perSecond:1.33},upstream_rq_total:{value:158343,perSecond:5277.8}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5230.73,totalRequests:156922,latency:{min:.367,mean:6.673,max:75.735,pstdev:11.892,percentiles:{p50:3.219,p75:5.053,p80:5.669,p90:8.493,p95:47.017,p99:53.731,p999:59.07}},resources:{envoyGateway:{memory:{min:153.16,max:162.19,mean:159.96},cpu:{min:.33,max:4.33,mean:.88}},envoyProxy:{memory:{min:28.28,max:34.65,mean:34.01},cpu:{min:0,max:100.09,mean:12.12}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:156922,perSecond:5230.73},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24636754,perSecond:821224.78},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7063155,perSecond:235438.4},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:156959,perSecond:5231.96}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5233.77,totalRequests:157018,latency:{min:.392,mean:6.716,max:74.948,pstdev:12.218,percentiles:{p50:3.086,p75:4.917,p80:5.54,p90:8.473,p95:48.504,p99:54.824,p999:60.995}},resources:{envoyGateway:{memory:{min:154.81,max:164.16,mean:158.99},cpu:{min:.47,max:9.67,mean:2.02}},envoyProxy:{memory:{min:34.51,max:38.95,mean:38.19},cpu:{min:0,max:99.98,mean:12.96}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:157018,perSecond:5233.77},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24651826,perSecond:821701.88},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7066755,perSecond:235551.15},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:157039,perSecond:5234.47}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5200.61,totalRequests:156022,latency:{min:.386,mean:6.733,max:87.748,pstdev:12.052,percentiles:{p50:3.188,p75:5.058,p80:5.703,p90:8.646,p95:47.349,p99:54.261,p999:62.337}},resources:{envoyGateway:{memory:{min:178.22,max:190.05,mean:185.94},cpu:{min:.53,max:63.2,mean:5.17}},envoyProxy:{memory:{min:58.72,max:59.32,mean:59.03},cpu:{min:0,max:100.06,mean:8.71}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:156022,perSecond:5200.61},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24495454,perSecond:816495.26},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7022115,perSecond:234064.8},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:156047,perSecond:5201.44}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5161.32,totalRequests:154842,latency:{min:.39,mean:6.838,max:87.953,pstdev:12.514,percentiles:{p50:3.154,p75:4.94,p80:5.547,p90:8.546,p95:48.75,p99:55.814,p999:66.682}},resources:{envoyGateway:{memory:{min:188.56,max:205.36,mean:199.35},cpu:{min:.2,max:1,mean:.72}},envoyProxy:{memory:{min:80.99,max:81.17,mean:81.05},cpu:{min:0,max:100.11,mean:13.39}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:154842,perSecond:5161.32},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24310194,perSecond:810327.12},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6968970,perSecond:232295.37},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:154866,perSecond:5162.12}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5070.93,totalRequests:152131,latency:{min:.369,mean:7.157,max:95.969,pstdev:13.025,percentiles:{p50:3.187,p75:5.196,p80:5.933,p90:9.716,p95:49.264,p99:58.398,p999:70.475}},resources:{envoyGateway:{memory:{min:235.82,max:250.67,mean:243.33},cpu:{min:.2,max:1.27,mean:.81}},envoyProxy:{memory:{min:127.18,max:127.36,mean:127.27},cpu:{min:0,max:99.82,mean:15.31}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:152131,perSecond:5070.93},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:23884567,perSecond:796135.93},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6847380,perSecond:228241.33},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:152164,perSecond:5072.03}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5231.33,totalRequests:156943,latency:{min:.352,mean:6.847,max:77.496,pstdev:12.213,percentiles:{p50:3.276,p75:5.1,p80:5.725,p90:8.528,p95:48.064,p99:54.683,p999:58.912}},resources:{envoyGateway:{memory:{min:244.6,max:250.95,mean:247.09},cpu:{min:.8,max:3.87,mean:1.17}},envoyProxy:{memory:{min:113.82,max:114,mean:113.88},cpu:{min:0,max:99.92,mean:6.36}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:156943,perSecond:5231.33},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24640051,perSecond:821318.13},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7063740,perSecond:235453.15},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:156972,perSecond:5232.29}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5261.75,totalRequests:157855,latency:{min:.399,mean:6.732,max:77.856,pstdev:12.3,percentiles:{p50:3.112,p75:4.945,p80:5.568,p90:8.439,p95:48.916,p99:54.951,p999:60.592}},resources:{envoyGateway:{memory:{min:224.61,max:255.07,mean:250.77},cpu:{min:.73,max:7.13,mean:1.49}},envoyProxy:{memory:{min:113.8,max:113.98,mean:113.86},cpu:{min:0,max:94.87,mean:7.39}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:157855,perSecond:5261.75},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24783235,perSecond:826094.04},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7104870,perSecond:236825.04},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:157886,perSecond:5262.78}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5237.44,totalRequests:157127,latency:{min:.359,mean:6.712,max:85.757,pstdev:12.224,percentiles:{p50:3.131,p75:4.899,p80:5.53,p90:8.45,p95:48.3,p99:55.074,p999:61.05}},resources:{envoyGateway:{memory:{min:172.34,max:224.61,mean:184.21},cpu:{min:.67,max:65.47,mean:5.97}},envoyProxy:{memory:{min:113.81,max:114,mean:113.88},cpu:{min:0,max:99.95,mean:9.23}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:157127,perSecond:5237.44},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24668939,perSecond:822278.65},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7071930,perSecond:235725.46},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:157154,perSecond:5238.34}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5179.69,totalRequests:155395,latency:{min:.398,mean:6.83,max:80.662,pstdev:12.28,percentiles:{p50:3.2,p75:5.016,p80:5.664,p90:8.694,p95:48.179,p99:55.212,p999:63.549}},resources:{envoyGateway:{memory:{min:179.46,max:205.75,mean:190.6},cpu:{min:.6,max:62.6,mean:3.68}},envoyProxy:{memory:{min:127.33,max:127.48,mean:127.37},cpu:{min:0,max:90.4,mean:7.51}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:155395,perSecond:5179.69},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24397015,perSecond:813211.27},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6993540,perSecond:233111.53},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:155412,perSecond:5180.26}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5186.01,totalRequests:155581,latency:{min:.38,mean:6.971,max:107.388,pstdev:12.508,percentiles:{p50:3.261,p75:5.13,p80:5.781,p90:8.858,p95:48.461,p99:55.611,p999:67.166}},resources:{envoyGateway:{memory:{min:197.3,max:213.13,mean:208.59},cpu:{min:.33,max:69.58,mean:2.16}},envoyProxy:{memory:{min:127.33,max:127.53,mean:127.38},cpu:{min:0,max:93.66,mean:10.66}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:155581,perSecond:5186.01},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24426217,perSecond:814203.16},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7002855,perSecond:233427.33},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:155619,perSecond:5187.27}}}]},dee={metadata:{version:"1.4.3",runId:"1.4.3-1763692899811",date:"2025-11-21T02:41:39.811Z",environment:"GitHub CI",description:"Benchmark results for version 1.4.3",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5355.55,totalRequests:160667,latency:{min:.358,mean:7.267,max:75.1,pstdev:12.628,percentiles:{p50:3.399,p75:5.544,p80:6.276,p90:9.99,p95:49.121,p99:55.177,p999:60.772}},resources:{envoyGateway:{memory:{min:130.65,max:152.97,mean:147.82},cpu:{min:.2,max:1,mean:.45}},envoyProxy:{memory:{min:0,max:27.79,mean:23.38},cpu:{min:0,max:99.91,mean:7.25}}},poolOverflow:359,upstreamConnections:41,counters:{"benchmark.http_2xx":{value:160667,perSecond:5355.55},"benchmark.pool_overflow":{value:359,perSecond:11.97},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:41,perSecond:1.37},upstream_cx_rx_bytes_total:{value:25224719,perSecond:840822.06},upstream_cx_total:{value:41,perSecond:1.37},upstream_cx_tx_bytes_total:{value:7231860,perSecond:241061.45},upstream_rq_pending_overflow:{value:359,perSecond:11.97},upstream_rq_pending_total:{value:41,perSecond:1.37},upstream_rq_total:{value:160708,perSecond:5356.92}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5340.22,totalRequests:160216,latency:{min:.39,mean:6.79,max:86.708,pstdev:12.266,percentiles:{p50:3.114,p75:5.075,p80:5.778,p90:8.996,p95:48.447,p99:54.765,p999:59.922}},resources:{envoyGateway:{memory:{min:153.72,max:164.07,mean:160.07},cpu:{min:.4,max:4.4,mean:.9}},envoyProxy:{memory:{min:27.43,max:31.89,mean:31.33},cpu:{min:0,max:100.05,mean:11.23}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:160216,perSecond:5340.22},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25153912,perSecond:838414.8},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7211070,perSecond:240354.97},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:160246,perSecond:5341.22}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5324.98,totalRequests:159753,latency:{min:.366,mean:6.637,max:92.008,pstdev:12.072,percentiles:{p50:3.127,p75:4.922,p80:5.533,p90:8.308,p95:48.07,p99:54.439,p999:60.065}},resources:{envoyGateway:{memory:{min:164.91,max:170.05,mean:166.44},cpu:{min:.4,max:8.2,mean:1.32}},envoyProxy:{memory:{min:31.52,max:37.83,mean:37.06},cpu:{min:0,max:92.36,mean:5.35}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:159753,perSecond:5324.98},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:25081221,perSecond:836022.33},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7190550,perSecond:239679.73},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:159790,perSecond:5326.22}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5216.76,totalRequests:156503,latency:{min:.377,mean:6.72,max:78.27,pstdev:12.03,percentiles:{p50:3.196,p75:5.018,p80:5.633,p90:8.582,p95:47.13,p99:54.605,p999:64.385}},resources:{envoyGateway:{memory:{min:179.89,max:190.89,mean:188.89},cpu:{min:.53,max:37.94,mean:4.32}},envoyProxy:{memory:{min:51.75,max:58.28,mean:57.56},cpu:{min:0,max:99.97,mean:10.27}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:156503,perSecond:5216.76},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24570971,perSecond:819031.62},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:7044300,perSecond:234809.79},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:156540,perSecond:5218}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5209.26,totalRequests:156278,latency:{min:.39,mean:6.375,max:101.388,pstdev:11.924,percentiles:{p50:2.96,p75:4.644,p80:5.225,p90:7.832,p95:47.497,p99:54.636,p999:65.597}},resources:{envoyGateway:{memory:{min:198.36,max:209.82,mean:204.77},cpu:{min:.47,max:39.55,mean:2.27}},envoyProxy:{memory:{min:77.96,max:78.17,mean:78.04},cpu:{min:0,max:99.98,mean:5.25}}},poolOverflow:365,upstreamConnections:35,counters:{"benchmark.http_2xx":{value:156278,perSecond:5209.26},"benchmark.pool_overflow":{value:365,perSecond:12.17},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:35,perSecond:1.17},upstream_cx_rx_bytes_total:{value:24535646,perSecond:817853.19},upstream_cx_total:{value:35,perSecond:1.17},upstream_cx_tx_bytes_total:{value:7034085,perSecond:234469.02},upstream_rq_pending_overflow:{value:365,perSecond:12.17},upstream_rq_pending_total:{value:35,perSecond:1.17},upstream_rq_total:{value:156313,perSecond:5210.42}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5098.94,totalRequests:152971,latency:{min:.359,mean:6.888,max:82.657,pstdev:12.606,percentiles:{p50:3.124,p75:4.997,p80:5.658,p90:8.935,p95:48.592,p99:56.84,p999:68.64}},resources:{envoyGateway:{memory:{min:228.83,max:240.91,mean:237.53},cpu:{min:.13,max:1.2,mean:.8}},envoyProxy:{memory:{min:126.34,max:126.55,mean:126.44},cpu:{min:0,max:100.05,mean:11.87}}},poolOverflow:363,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:152971,perSecond:5098.94},"benchmark.pool_overflow":{value:363,perSecond:12.1},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:37,perSecond:1.23},upstream_cx_rx_bytes_total:{value:24016447,perSecond:800534.22},upstream_cx_total:{value:37,perSecond:1.23},upstream_cx_tx_bytes_total:{value:6884370,perSecond:229474.98},upstream_rq_pending_overflow:{value:363,perSecond:12.1},upstream_rq_pending_total:{value:37,perSecond:1.23},upstream_rq_total:{value:152986,perSecond:5099.44}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5357.63,totalRequests:160736,latency:{min:.377,mean:6.733,max:73.097,pstdev:11.999,percentiles:{p50:3.204,p75:5.032,p80:5.678,p90:8.677,p95:47.718,p99:54.052,p999:59.168}},resources:{envoyGateway:{memory:{min:238.38,max:246.22,mean:241.42},cpu:{min:.73,max:3.93,mean:1.17}},envoyProxy:{memory:{min:122.09,max:122.25,mean:122.14},cpu:{min:0,max:99.72,mean:9.75}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:160736,perSecond:5357.63},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25235552,perSecond:841148.66},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7234650,perSecond:241144.56},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:160770,perSecond:5358.77}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5332.35,totalRequests:159971,latency:{min:.39,mean:6.8,max:72.916,pstdev:12.278,percentiles:{p50:3.17,p75:4.982,p80:5.616,p90:8.533,p95:48.674,p99:55.203,p999:59.807}},resources:{envoyGateway:{memory:{min:240.27,max:254.06,mean:244.17},cpu:{min:.67,max:7.07,mean:1.48}},envoyProxy:{memory:{min:122.07,max:122.28,mean:122.13},cpu:{min:0,max:100.09,mean:9.45}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:159971,perSecond:5332.35},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25115447,perSecond:837179.18},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7200405,perSecond:240012.82},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:160009,perSecond:5333.62}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5327.29,totalRequests:159819,latency:{min:.369,mean:6.798,max:75.177,pstdev:12.404,percentiles:{p50:3.117,p75:4.972,p80:5.617,p90:8.628,p95:49.203,p99:55.308,p999:61.265}},resources:{envoyGateway:{memory:{min:183.42,max:257.85,mean:238.95},cpu:{min:.67,max:67.53,mean:7.3}},envoyProxy:{memory:{min:122.02,max:122.51,mean:122.15},cpu:{min:0,max:99.85,mean:14.48}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:159819,perSecond:5327.29},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:25091583,perSecond:836384.72},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7193565,perSecond:239785.1},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:159857,perSecond:5328.56}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5289.39,totalRequests:158686,latency:{min:.368,mean:6.822,max:81.756,pstdev:12.344,percentiles:{p50:3.163,p75:4.985,p80:5.606,p90:8.64,p95:48.357,p99:55.128,p999:63.125}},resources:{envoyGateway:{memory:{min:181.54,max:195.97,mean:192.74},cpu:{min:.33,max:72.2,mean:3.57}},envoyProxy:{memory:{min:126.37,max:126.8,mean:126.47},cpu:{min:0,max:62.71,mean:1.45}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:158686,perSecond:5289.39},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24913702,perSecond:830433.73},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:7142175,perSecond:238065.91},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:158715,perSecond:5290.35}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5169.42,totalRequests:155086,latency:{min:.391,mean:7.03,max:99.708,pstdev:12.686,percentiles:{p50:3.21,p75:5.119,p80:5.775,p90:9.064,p95:49.074,p99:56.016,p999:65.034}},resources:{envoyGateway:{memory:{min:192.96,max:208.64,mean:205.72},cpu:{min:.33,max:40.87,mean:2.37}},envoyProxy:{memory:{min:126.37,max:126.55,mean:126.42},cpu:{min:0,max:67.89,mean:1.84}}},poolOverflow:362,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:155086,perSecond:5169.42},"benchmark.pool_overflow":{value:362,perSecond:12.07},"cluster_manager.cluster_added":{value:4,perSecond:.13},"default.total_match_count":{value:4,perSecond:.13},membership_change:{value:4,perSecond:.13},"runtime.load_success":{value:1,perSecond:.03},"runtime.override_dir_not_exists":{value:1,perSecond:.03},upstream_cx_http1_total:{value:38,perSecond:1.27},upstream_cx_rx_bytes_total:{value:24348502,perSecond:811598.23},upstream_cx_total:{value:38,perSecond:1.27},upstream_cx_tx_bytes_total:{value:6979860,perSecond:232656.7},upstream_rq_pending_overflow:{value:362,perSecond:12.07},upstream_rq_pending_total:{value:38,perSecond:1.27},upstream_rq_total:{value:155108,perSecond:5170.15}}}]},fee={metadata:{version:"1.4.2",runId:"1.4.2-1752805392474",date:"2025-07-18T02:23:12.474Z",environment:"GitHub CI",description:"Benchmark results for version 1.4.2",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5153.92,totalRequests:154618,latency:{min:.383,mean:7.923,max:80.375,pstdev:13.254,percentiles:{p50:3.722,p75:6.072,p80:6.915,p90:11.685,p95:49.872,p99:56.281,p999:62.722}},resources:{envoyGateway:{memory:{min:131.64,max:158.27,mean:153.65},cpu:{min:.13,max:1,mean:.43}},envoyProxy:{memory:{min:0,max:27.04,mean:24.5},cpu:{min:0,max:92.27,mean:13.11}}},poolOverflow:357,upstreamConnections:43},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5214.96,totalRequests:156456,latency:{min:.392,mean:6.917,max:94.703,pstdev:12.289,percentiles:{p50:3.265,p75:5.168,p80:5.85,p90:9.014,p95:48.109,p99:54.501,p999:61.138}},resources:{envoyGateway:{memory:{min:151.75,max:162.37,mean:156.16},cpu:{min:.27,max:4.07,mean:.93}},envoyProxy:{memory:{min:26.85,max:33.23,mean:31.93},cpu:{min:0,max:99.8,mean:2.75}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5286.96,totalRequests:158609,latency:{min:.368,mean:7.734,max:92.332,pstdev:12.933,percentiles:{p50:3.787,p75:5.897,p80:6.637,p90:10.518,p95:49.209,p99:55.494,p999:62.668}},resources:{envoyGateway:{memory:{min:154.29,max:162.45,mean:160.12},cpu:{min:.4,max:8.13,mean:1.15}},envoyProxy:{memory:{min:33.08,max:37.43,mean:36.96},cpu:{min:0,max:99.94,mean:12.84}}},poolOverflow:357,upstreamConnections:43},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5071.92,totalRequests:152158,latency:{min:.367,mean:7.108,max:96.673,pstdev:12.611,percentiles:{p50:3.259,p75:5.273,p80:5.983,p90:9.54,p95:48.895,p99:55.816,p999:64.583}},resources:{envoyGateway:{memory:{min:178.72,max:189.43,mean:185.02},cpu:{min:.53,max:49.47,mean:4.51}},envoyProxy:{memory:{min:53.3,max:57.54,mean:57.04},cpu:{min:0,max:100.16,mean:15}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:4987.92,totalRequests:149640,latency:{min:.394,mean:7.071,max:108.81,pstdev:12.666,percentiles:{p50:3.283,p75:5.167,p80:5.821,p90:9.217,p95:48.912,p99:56.031,p999:68.722}},resources:{envoyGateway:{memory:{min:187.59,max:203.43,mean:199.65},cpu:{min:.27,max:48.25,mean:1.88}},envoyProxy:{memory:{min:73.41,max:79.6,mean:79.35},cpu:{min:0,max:99.91,mean:11.81}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:4945.69,totalRequests:148373,latency:{min:.411,mean:7.306,max:101.023,pstdev:12.99,percentiles:{p50:3.249,p75:5.44,p80:6.223,p90:10.246,p95:49.207,p99:57.444,p999:69.57}},resources:{envoyGateway:{memory:{min:231.85,max:243.1,mean:237.75},cpu:{min:.2,max:1.2,mean:.84}},envoyProxy:{memory:{min:129.84,max:130.36,mean:129.96},cpu:{min:0,max:99.89,mean:11.78}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5200.02,totalRequests:156013,latency:{min:.397,mean:7.832,max:75.223,pstdev:13.154,percentiles:{p50:3.651,p75:5.953,p80:6.758,p90:11.656,p95:49.915,p99:56.15,p999:62.173}},resources:{envoyGateway:{memory:{min:262.52,max:266.5,mean:263.99},cpu:{min:.67,max:3.53,mean:1.15}},envoyProxy:{memory:{min:123.49,max:123.65,mean:123.54},cpu:{min:0,max:100.22,mean:7.55}}},poolOverflow:357,upstreamConnections:43},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5116.68,totalRequests:153503,latency:{min:.404,mean:7.069,max:71.688,pstdev:12.498,percentiles:{p50:3.313,p75:5.203,p80:5.888,p90:9.173,p95:48.934,p99:55.58,p999:61.552}},resources:{envoyGateway:{memory:{min:266.25,max:277.75,mean:267.54},cpu:{min:.67,max:7.13,mean:1.51}},envoyProxy:{memory:{min:123.47,max:123.67,mean:123.53},cpu:{min:0,max:99.78,mean:4.47}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5153.5,totalRequests:154605,latency:{min:.376,mean:6.989,max:80.056,pstdev:12.394,percentiles:{p50:3.284,p75:5.189,p80:5.871,p90:9.047,p95:48.644,p99:55.019,p999:61.106}},resources:{envoyGateway:{memory:{min:170.85,max:277.75,mean:210.44},cpu:{min:.67,max:68.27,mean:7.39}},envoyProxy:{memory:{min:123.46,max:123.75,mean:123.55},cpu:{min:0,max:100.02,mean:16.06}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5125.52,totalRequests:153766,latency:{min:.369,mean:6.827,max:85.323,pstdev:12.196,percentiles:{p50:3.193,p75:5.036,p80:5.699,p90:8.862,p95:47.597,p99:54.747,p999:64.284}},resources:{envoyGateway:{memory:{min:181.68,max:196.62,mean:192.08},cpu:{min:.4,max:72.6,mean:3.62}},envoyProxy:{memory:{min:129.86,max:130.06,mean:129.95},cpu:{min:0,max:100.07,mean:13.11}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5130.15,totalRequests:153916,latency:{min:.389,mean:7.004,max:103.731,pstdev:12.505,percentiles:{p50:3.244,p75:5.247,p80:5.944,p90:9.184,p95:48.279,p99:55.42,p999:66.549}},resources:{envoyGateway:{memory:{min:205.04,max:208.2,mean:206.96},cpu:{min:.33,max:54.27,mean:2.52}},envoyProxy:{memory:{min:129.85,max:130.02,mean:129.9},cpu:{min:0,max:91.79,mean:22.69}}},poolOverflow:362,upstreamConnections:38}]},vee={metadata:{version:"1.4.1",runId:"1.4.1-1750189826783",date:"2025-06-04",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.4.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.4.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5440.31,totalRequests:163209,latency:{min:.335,mean:6.565,max:66.668,pstdev:11.48,percentiles:{p50:3.258,p75:5.079,p80:5.722,p90:8.679,p95:45.924,p99:53.512,p999:58.22}},resources:{envoyGateway:{memory:{min:128.02,max:151.26,mean:147.41},cpu:{min:.27,max:.67,mean:.45}},envoyProxy:{memory:{min:0,max:26.92,mean:22.58},cpu:{min:0,max:99.73,mean:6.02}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5429.88,totalRequests:162900,latency:{min:.345,mean:6.468,max:70.791,pstdev:11.793,percentiles:{p50:3.17,p75:4.794,p80:5.311,p90:7.534,p95:47.4,p99:53.536,p999:58.034}},resources:{envoyGateway:{memory:{min:151.26,max:170.78,mean:161.92},cpu:{min:.4,max:4.33,mean:.97}},envoyProxy:{memory:{min:26.73,max:33.13,mean:31.63},cpu:{min:0,max:99.94,mean:3.35}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5499.86,totalRequests:164996,latency:{min:.391,mean:8.147,max:99.663,pstdev:13.319,percentiles:{p50:3.957,p75:6.308,p80:7.12,p90:11.799,p95:49.942,p99:56.19,p999:62.709}},resources:{envoyGateway:{memory:{min:161.19,max:165.52,mean:163.96},cpu:{min:.4,max:8.67,mean:1.36}},envoyProxy:{memory:{min:32.98,max:39.18,mean:38.14},cpu:{min:0,max:99.97,mean:8.67}}},poolOverflow:353,upstreamConnections:47},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5335.1,totalRequests:160053,latency:{min:.365,mean:6.734,max:90.963,pstdev:12.096,percentiles:{p50:3.228,p75:5.042,p80:5.649,p90:8.465,p95:47.704,p99:54.396,p999:61.714}},resources:{envoyGateway:{memory:{min:183.87,max:223.25,mean:206.96},cpu:{min:.47,max:79.87,mean:3.9}},envoyProxy:{memory:{min:57.15,max:57.52,mean:57.34},cpu:{min:0,max:99.97,mean:13.49}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5256.52,totalRequests:157696,latency:{min:.389,mean:6.32,max:77.848,pstdev:11.829,percentiles:{p50:2.974,p75:4.705,p80:5.292,p90:7.729,p95:47.173,p99:54.317,p999:64.679}},resources:{envoyGateway:{memory:{min:186.16,max:199.19,mean:195.68},cpu:{min:.4,max:1.2,mean:.75}},envoyProxy:{memory:{min:63.26,max:79.43,mean:79.04},cpu:{min:0,max:99.86,mean:17.64}}},poolOverflow:365,upstreamConnections:35},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5280.09,totalRequests:158409,latency:{min:.387,mean:6.871,max:94.064,pstdev:12.441,percentiles:{p50:3.186,p75:5.019,p80:5.651,p90:8.766,p95:48.361,p99:55.758,p999:67.403}},resources:{envoyGateway:{memory:{min:230.81,max:243.68,mean:238.65},cpu:{min:.13,max:1.13,mean:.8}},envoyProxy:{memory:{min:127.63,max:127.86,mean:127.72},cpu:{min:0,max:85.57,mean:6.19}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5430.18,totalRequests:162909,latency:{min:.376,mean:6.679,max:79.63,pstdev:12.142,percentiles:{p50:3.147,p75:5.015,p80:5.63,p90:8.374,p95:48.377,p99:54.654,p999:59.858}},resources:{envoyGateway:{memory:{min:164.61,max:169.75,mean:165.39},cpu:{min:.8,max:3.47,mean:1.14}},envoyProxy:{memory:{min:121.22,max:121.61,mean:121.3},cpu:{min:0,max:99.74,mean:8.02}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5506.49,totalRequests:165195,latency:{min:.386,mean:8.319,max:85.86,pstdev:13.567,percentiles:{p50:3.951,p75:6.305,p80:7.155,p90:12.741,p95:50.714,p99:57.303,p999:63.928}},resources:{envoyGateway:{memory:{min:165.63,max:175.23,mean:169.06},cpu:{min:.8,max:7.53,mean:1.54}},envoyProxy:{memory:{min:111.91,max:121.36,mean:113.46},cpu:{min:0,max:99.75,mean:7.62}}},poolOverflow:352,upstreamConnections:48},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5452.96,totalRequests:163589,latency:{min:.395,mean:7.694,max:97.46,pstdev:12.949,percentiles:{p50:3.636,p75:5.828,p80:6.627,p90:10.929,p95:49.506,p99:55.681,p999:62.369}},resources:{envoyGateway:{memory:{min:166.64,max:195.48,mean:174.79},cpu:{min:.8,max:38.2,mean:5.63}},envoyProxy:{memory:{min:111.8,max:112.36,mean:111.95},cpu:{min:0,max:35.17,mean:2.77}}},poolOverflow:356,upstreamConnections:44},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5360.33,totalRequests:160815,latency:{min:.354,mean:6.538,max:92.344,pstdev:12.045,percentiles:{p50:3.068,p75:4.77,p80:5.341,p90:7.974,p95:47.742,p99:54.48,p999:62.144}},resources:{envoyGateway:{memory:{min:180.27,max:192.65,mean:189.01},cpu:{min:.67,max:46.53,mean:4.41}},envoyProxy:{memory:{min:127.66,max:127.84,mean:127.72},cpu:{min:0,max:100.03,mean:9.14}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5334.03,totalRequests:160024,latency:{min:.392,mean:6.782,max:132.493,pstdev:12.373,percentiles:{p50:3.182,p75:4.977,p80:5.586,p90:8.359,p95:48.365,p99:55.252,p999:64.712}},resources:{envoyGateway:{memory:{min:203.37,max:217.03,mean:209.04},cpu:{min:.67,max:5.67,mean:1.33}},envoyProxy:{memory:{min:127.65,max:127.84,mean:127.72},cpu:{min:0,max:99.86,mean:9.91}}},poolOverflow:362,upstreamConnections:38}]},hee={metadata:{version:"1.4.0",runId:"1.4.0-1750189826781",date:"2025-05-14",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.4.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.4.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:5433.23,totalRequests:163e3,latency:{min:.367,mean:6.485,max:65.673,pstdev:11.042,percentiles:{p50:3.222,p75:5.166,p80:5.879,p90:9.253,p95:43.97,p99:52.201,p999:56.854}},resources:{envoyGateway:{memory:{min:128.52,max:156.24,mean:150.28},cpu:{min:.13,max:.67,mean:.44}},envoyProxy:{memory:{min:0,max:27.01,mean:21.73},cpu:{min:0,max:72.36,mean:2.32}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:5340.69,totalRequests:160221,latency:{min:.355,mean:6.582,max:88.674,pstdev:11.849,percentiles:{p50:3.134,p75:4.984,p80:5.597,p90:8.545,p95:46.972,p99:53.663,p999:59.625}},resources:{envoyGateway:{memory:{min:155.3,max:169.25,mean:159.23},cpu:{min:.27,max:4.73,mean:.91}},envoyProxy:{memory:{min:26.64,max:33.18,mean:32.22},cpu:{min:0,max:99.91,mean:11.1}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling up httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:5205.41,totalRequests:156162,latency:{min:.384,mean:4.221,max:63.5,pstdev:9.204,percentiles:{p50:2.039,p75:3.063,p80:3.399,p90:4.605,p95:7.844,p99:49.758,p999:54.032}},resources:{envoyGateway:{memory:{min:156.77,max:174.36,mean:168.53},cpu:{min:.4,max:8.8,mean:1.37}},envoyProxy:{memory:{min:32.83,max:37.05,mean:36.58},cpu:{min:0,max:99.97,mean:4.39}}},poolOverflow:377,upstreamConnections:23},{testName:"scaling up httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:5271.84,totalRequests:158157,latency:{min:.393,mean:7.209,max:93.327,pstdev:12.64,percentiles:{p50:3.281,p75:5.443,p80:6.241,p90:10.258,p95:48.494,p99:55.793,p999:65.497}},resources:{envoyGateway:{memory:{min:179.66,max:187.8,mean:184.81},cpu:{min:.53,max:27.13,mean:4.87}},envoyProxy:{memory:{min:53.06,max:57.31,mean:56.58},cpu:{min:0,max:99.96,mean:15.82}}},poolOverflow:360,upstreamConnections:40},{testName:"scaling up httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:5351.64,totalRequests:160555,latency:{min:.37,mean:6.797,max:91.549,pstdev:12.276,percentiles:{p50:3.145,p75:5.052,p80:5.728,p90:8.916,p95:47.915,p99:54.947,p999:65.368}},resources:{envoyGateway:{memory:{min:186.4,max:200.27,mean:195.8},cpu:{min:.4,max:26.07,mean:1.71}},envoyProxy:{memory:{min:71.16,max:77.36,mean:77},cpu:{min:0,max:94.88,mean:3.39}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling up httproutes to 1000 with 200 routes per hostname",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5239.17,totalRequests:157179,latency:{min:.367,mean:6.908,max:97.939,pstdev:12.608,percentiles:{p50:3.176,p75:5.046,p80:5.68,p90:8.77,p95:48.472,p99:56.449,p999:68.317}},resources:{envoyGateway:{memory:{min:220.03,max:237.27,mean:233.38},cpu:{min:.07,max:1.2,mean:.78}},envoyProxy:{memory:{min:129.13,max:129.59,mean:129.34},cpu:{min:0,max:74.43,mean:2.24}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 10 with 2 routes per hostname",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:5409.79,totalRequests:162296,latency:{min:.386,mean:6.69,max:71.688,pstdev:12.144,percentiles:{p50:3.075,p75:4.937,p80:5.61,p90:8.727,p95:48.252,p99:54.595,p999:59.408}},resources:{envoyGateway:{memory:{min:165.91,max:176.04,mean:168.11},cpu:{min:.67,max:3.73,mean:1.23}},envoyProxy:{memory:{min:123.28,max:123.45,mean:123.35},cpu:{min:0,max:99.72,mean:9.08}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 50 with 10 routes per hostname",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:5480.62,totalRequests:164426,latency:{min:.378,mean:7.119,max:85.032,pstdev:12.404,percentiles:{p50:3.39,p75:5.34,p80:6.015,p90:9.3,p95:48.457,p99:55.005,p999:60.284}},resources:{envoyGateway:{memory:{min:165.36,max:171.88,mean:169.47},cpu:{min:.6,max:6.8,mean:1.44}},envoyProxy:{memory:{min:123.27,max:123.97,mean:123.42},cpu:{min:0,max:100.05,mean:11.5}}},poolOverflow:359,upstreamConnections:41},{testName:"scaling down httproutes to 100 with 20 routes per hostname",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:5413.63,totalRequests:162409,latency:{min:.357,mean:6.664,max:77.307,pstdev:12.03,percentiles:{p50:3.14,p75:4.935,p80:5.56,p90:8.456,p95:47.661,p99:54.544,p999:61.11}},resources:{envoyGateway:{memory:{min:170.86,max:186.68,mean:173.53},cpu:{min:.67,max:67.27,mean:7.29}},envoyProxy:{memory:{min:123.27,max:129.61,mean:124.04},cpu:{min:0,max:100,mean:5.99}}},poolOverflow:362,upstreamConnections:38},{testName:"scaling down httproutes to 300 with 60 routes per hostname",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:5356.13,totalRequests:160684,latency:{min:.376,mean:6.544,max:86.54,pstdev:11.908,percentiles:{p50:3.079,p75:4.927,p80:5.554,p90:8.36,p95:47.069,p99:54.265,p999:62.601}},resources:{envoyGateway:{memory:{min:176.87,max:192.99,mean:189.97},cpu:{min:.6,max:73.6,mean:5.05}},envoyProxy:{memory:{min:129.54,max:129.76,mean:129.65},cpu:{min:0,max:100.08,mean:11.45}}},poolOverflow:363,upstreamConnections:37},{testName:"scaling down httproutes to 500 with 100 routes per hostname",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:5339.99,totalRequests:160200,latency:{min:.395,mean:6.772,max:99.7,pstdev:12.345,percentiles:{p50:3.118,p75:4.954,p80:5.598,p90:8.672,p95:48.261,p99:55.498,p999:65.902}},resources:{envoyGateway:{memory:{min:199.81,max:210.76,mean:205.85},cpu:{min:.4,max:31.13,mean:2.01}},envoyProxy:{memory:{min:129.54,max:129.74,mean:129.6},cpu:{min:0,max:99.87,mean:8.99}}},poolOverflow:362,upstreamConnections:38}]},yee={metadata:{version:"1.3.3",runId:"1.3.3-1750189826778",date:"2025-05-09",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.3",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.3/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5302.05,totalRequests:159067,latency:{min:.384,mean:7.44,max:68.399,pstdev:12.191,percentiles:{p50:3.692,p75:5.903,p80:6.67,p90:10.777,p95:47.519,p99:54.405,p999:59.346}},resources:{envoyGateway:{memory:{min:126.17,max:126.17,mean:126.17},cpu:{min:.95,max:.95,mean:.95}},envoyProxy:{memory:{min:25.93,max:25.93,mean:25.93},cpu:{min:30.42,max:30.42,mean:30.42}}},poolOverflow:358,upstreamConnections:42},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5270.25,totalRequests:158112,latency:{min:.392,mean:7.067,max:77.467,pstdev:12.552,percentiles:{p50:3.33,p75:5.225,p80:5.887,p90:8.906,p95:49.113,p99:55.103,p999:60.295}},resources:{envoyGateway:{memory:{min:145.89,max:145.89,mean:145.89},cpu:{min:1.66,max:1.66,mean:1.66}},envoyProxy:{memory:{min:32.1,max:32.1,mean:32.1},cpu:{min:60.71,max:60.71,mean:60.71}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5307.61,totalRequests:159230,latency:{min:.387,mean:7.35,max:76.185,pstdev:12.732,percentiles:{p50:3.508,p75:5.524,p80:6.22,p90:9.652,p95:49.1,p99:55.363,p999:62.654}},resources:{envoyGateway:{memory:{min:153.05,max:153.05,mean:153.05},cpu:{min:3.08,max:3.08,mean:3.08}},envoyProxy:{memory:{min:38.29,max:38.29,mean:38.29},cpu:{min:91.5,max:91.5,mean:91.5}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5139.63,totalRequests:154189,latency:{min:.39,mean:7.376,max:78.098,pstdev:12.993,percentiles:{p50:3.429,p75:5.431,p80:6.116,p90:9.633,p95:49.809,p99:56.043,p999:64.651}},resources:{envoyGateway:{memory:{min:152.28,max:152.28,mean:152.28},cpu:{min:15.6,max:15.6,mean:15.6}},envoyProxy:{memory:{min:56.33,max:56.33,mean:56.33},cpu:{min:124.15,max:124.15,mean:124.15}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5169.8,totalRequests:155094,latency:{min:.374,mean:7.385,max:105.918,pstdev:13.085,percentiles:{p50:3.382,p75:5.336,p80:6.024,p90:9.658,p95:50.104,p99:56.487,p999:66.418}},resources:{envoyGateway:{memory:{min:166.29,max:166.29,mean:166.29},cpu:{min:28.13,max:28.13,mean:28.13}},envoyProxy:{memory:{min:76.53,max:76.53,mean:76.53},cpu:{min:157.45,max:157.45,mean:157.45}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:4963.46,totalRequests:148908,latency:{min:.374,mean:7.335,max:94.58,pstdev:13.294,percentiles:{p50:3.255,p75:5.279,p80:5.998,p90:9.532,p95:50.294,p99:58.908,p999:70.729}},resources:{envoyGateway:{memory:{min:199.79,max:199.79,mean:199.79},cpu:{min:61.67,max:61.67,mean:61.67}},envoyProxy:{memory:{min:120.77,max:120.77,mean:120.77},cpu:{min:195.1,max:195.1,mean:195.1}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5200.07,totalRequests:156001,latency:{min:.395,mean:7.53,max:81.936,pstdev:13.142,percentiles:{p50:3.438,p75:5.497,p80:6.226,p90:10.218,p95:50.345,p99:56.436,p999:61.919}},resources:{envoyGateway:{memory:{min:221.87,max:221.87,mean:221.87},cpu:{min:114.77,max:114.77,mean:114.77}},envoyProxy:{memory:{min:121.27,max:121.27,mean:121.27},cpu:{min:356.4,max:356.4,mean:356.4}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5229.66,totalRequests:156893,latency:{min:.368,mean:6.911,max:72.273,pstdev:12.396,percentiles:{p50:3.227,p75:5.075,p80:5.695,p90:8.751,p95:48.676,p99:54.822,p999:59.865}},resources:{envoyGateway:{memory:{min:221.8,max:221.8,mean:221.8},cpu:{min:114.13,max:114.13,mean:114.13}},envoyProxy:{memory:{min:121.22,max:121.22,mean:121.22},cpu:{min:325.9,max:325.9,mean:325.9}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5099.34,totalRequests:152980,latency:{min:.357,mean:6.637,max:68.1,pstdev:12.012,percentiles:{p50:3.167,p75:4.972,p80:5.58,p90:8.302,p95:47.65,p99:53.993,p999:59.299}},resources:{envoyGateway:{memory:{min:182.69,max:182.69,mean:182.69},cpu:{min:113.02,max:113.02,mean:113.02}},envoyProxy:{memory:{min:121.2,max:121.2,mean:121.2},cpu:{min:295.3,max:295.3,mean:295.3}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5145.13,totalRequests:154357,latency:{min:.379,mean:7.234,max:111.517,pstdev:12.814,percentiles:{p50:3.381,p75:5.331,p80:5.993,p90:9.269,p95:49.465,p99:55.562,p999:64.862}},resources:{envoyGateway:{memory:{min:159.09,max:159.09,mean:159.09},cpu:{min:102.57,max:102.57,mean:102.57}},envoyProxy:{memory:{min:121.08,max:121.08,mean:121.08},cpu:{min:263.29,max:263.29,mean:263.29}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5130.95,totalRequests:153929,latency:{min:.365,mean:7.098,max:95.834,pstdev:12.843,percentiles:{p50:3.267,p75:5.11,p80:5.752,p90:8.975,p95:49.702,p99:56.408,p999:67.33}},resources:{envoyGateway:{memory:{min:163.91,max:163.91,mean:163.91},cpu:{min:91.18,max:91.18,mean:91.18}},envoyProxy:{memory:{min:120.91,max:120.91,mean:120.91},cpu:{min:230.77,max:230.77,mean:230.77}}},poolOverflow:362,upstreamConnections:38}]},_ee={metadata:{version:"1.3.2",runId:"1.3.2-1750189826777",date:"2025-03-24",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.2",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.2/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5203.06,totalRequests:156092,latency:{min:.371,mean:6.97,max:73.949,pstdev:12.106,percentiles:{p50:3.331,p75:5.396,p80:6.08,p90:9.715,p95:47.564,p99:55.666,p999:60.872}},resources:{envoyGateway:{memory:{min:126.68,max:126.68,mean:126.68},cpu:{min:.99,max:.99,mean:.99}},envoyProxy:{memory:{min:28.17,max:28.17,mean:28.17},cpu:{min:30.49,max:30.49,mean:30.49}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5157.35,totalRequests:154724,latency:{min:.38,mean:6.752,max:83.992,pstdev:12.526,percentiles:{p50:3.089,p75:4.875,p80:5.484,p90:8.253,p95:49.682,p99:55.398,p999:61.507}},resources:{envoyGateway:{memory:{min:129.05,max:129.05,mean:129.05},cpu:{min:1.79,max:1.79,mean:1.79}},envoyProxy:{memory:{min:32.33,max:32.33,mean:32.33},cpu:{min:61.02,max:61.02,mean:61.02}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5052.19,totalRequests:151566,latency:{min:.363,mean:7.564,max:72.122,pstdev:13.492,percentiles:{p50:3.384,p75:5.472,p80:6.191,p90:9.941,p95:51.32,p99:57.128,p999:63.107}},resources:{envoyGateway:{memory:{min:146.92,max:146.92,mean:146.92},cpu:{min:3.17,max:3.17,mean:3.17}},envoyProxy:{memory:{min:40.52,max:40.52,mean:40.52},cpu:{min:91.79,max:91.79,mean:91.79}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5101.42,totalRequests:153051,latency:{min:.397,mean:6.832,max:82.624,pstdev:12.894,percentiles:{p50:2.99,p75:4.798,p80:5.418,p90:8.366,p95:50.391,p99:56.737,p999:65.114}},resources:{envoyGateway:{memory:{min:154.98,max:154.98,mean:154.98},cpu:{min:15.2,max:15.2,mean:15.2}},envoyProxy:{memory:{min:58.7,max:58.7,mean:58.7},cpu:{min:124.54,max:124.54,mean:124.54}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:4948.44,totalRequests:148459,latency:{min:.398,mean:7.2,max:94.949,pstdev:13.256,percentiles:{p50:3.208,p75:5.057,p80:5.652,p90:8.78,p95:50.821,p99:57.442,p999:66.746}},resources:{envoyGateway:{memory:{min:163.01,max:163.01,mean:163.01},cpu:{min:27.68,max:27.68,mean:27.68}},envoyProxy:{memory:{min:78.9,max:78.9,mean:78.9},cpu:{min:158.2,max:158.2,mean:158.2}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:4933.76,totalRequests:148015,latency:{min:.361,mean:7.088,max:127.959,pstdev:13.349,percentiles:{p50:3.052,p75:4.885,p80:5.529,p90:8.785,p95:50.7,p99:59.123,p999:70.66}},resources:{envoyGateway:{memory:{min:196.05,max:196.05,mean:196.05},cpu:{min:62.32,max:62.32,mean:62.32}},envoyProxy:{memory:{min:127.19,max:127.19,mean:127.19},cpu:{min:196.79,max:196.79,mean:196.79}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5116.93,totalRequests:153515,latency:{min:.387,mean:9.017,max:78.245,pstdev:15.046,percentiles:{p50:3.922,p75:6.583,p80:7.609,p90:16.301,p95:54.007,p99:59.99,p999:67.956}},resources:{envoyGateway:{memory:{min:210.06,max:210.06,mean:210.06},cpu:{min:115.56,max:115.56,mean:115.56}},envoyProxy:{memory:{min:110.31,max:110.31,mean:110.31},cpu:{min:358.89,max:358.89,mean:358.89}}},poolOverflow:351,upstreamConnections:49},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:4991.13,totalRequests:149734,latency:{min:.391,mean:7.071,max:80.433,pstdev:12.841,percentiles:{p50:3.199,p75:5.005,p80:5.635,p90:8.73,p95:49.813,p99:55.756,p999:61.407}},resources:{envoyGateway:{memory:{min:199.41,max:199.41,mean:199.41},cpu:{min:114.89,max:114.89,mean:114.89}},envoyProxy:{memory:{min:127.44,max:127.44,mean:127.44},cpu:{min:328.33,max:328.33,mean:328.33}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5138.59,totalRequests:154161,latency:{min:.377,mean:6.954,max:86.982,pstdev:13.049,percentiles:{p50:3.045,p75:4.886,p80:5.525,p90:8.466,p95:51.048,p99:56.733,p999:62.337}},resources:{envoyGateway:{memory:{min:219.76,max:219.76,mean:219.76},cpu:{min:113.71,max:113.71,mean:113.71}},envoyProxy:{memory:{min:127.31,max:127.31,mean:127.31},cpu:{min:297.73,max:297.73,mean:297.73}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5051.68,totalRequests:151551,latency:{min:.389,mean:7.977,max:86.577,pstdev:14.09,percentiles:{p50:3.498,p75:5.731,p80:6.471,p90:10.947,p95:52.355,p99:58.748,p999:67.379}},resources:{envoyGateway:{memory:{min:259.14,max:259.14,mean:259.14},cpu:{min:103.22,max:103.22,mean:103.22}},envoyProxy:{memory:{min:127.31,max:127.31,mean:127.31},cpu:{min:265.59,max:265.59,mean:265.59}}},poolOverflow:357,upstreamConnections:43},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:4962.4,totalRequests:148872,latency:{min:.384,mean:7.209,max:110.186,pstdev:13.357,percentiles:{p50:3.112,p75:5.018,p80:5.694,p90:9.338,p95:51.267,p99:57.384,p999:67.244}},resources:{envoyGateway:{memory:{min:177.76,max:177.76,mean:177.76},cpu:{min:91.86,max:91.86,mean:91.86}},envoyProxy:{memory:{min:127.24,max:127.24,mean:127.24},cpu:{min:233.07,max:233.07,mean:233.07}}},poolOverflow:362,upstreamConnections:38}]},gee={metadata:{version:"1.3.1",runId:"1.3.1-1750189826775",date:"2025-03-05",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5115.35,totalRequests:153465,latency:{min:.389,mean:6.604,max:74.543,pstdev:11.843,percentiles:{p50:3.094,p75:5.007,p80:5.671,p90:8.723,p95:46.997,p99:55.033,p999:60.336}},resources:{envoyGateway:{memory:{min:122.23,max:122.23,mean:122.23},cpu:{min:1.04,max:1.04,mean:1.04}},envoyProxy:{memory:{min:25.28,max:25.28,mean:25.28},cpu:{min:30.51,max:30.51,mean:30.51}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5150.43,totalRequests:154513,latency:{min:.386,mean:6.919,max:87.556,pstdev:12.645,percentiles:{p50:3.126,p75:5.009,p80:5.646,p90:8.62,p95:49.58,p99:55.326,p999:60.073}},resources:{envoyGateway:{memory:{min:151.59,max:151.59,mean:151.59},cpu:{min:1.83,max:1.83,mean:1.83}},envoyProxy:{memory:{min:31.45,max:31.45,mean:31.45},cpu:{min:61.11,max:61.11,mean:61.11}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5211.7,totalRequests:156354,latency:{min:.376,mean:6.687,max:88.604,pstdev:12.657,percentiles:{p50:2.913,p75:4.676,p80:5.309,p90:8.259,p95:49.93,p99:55.853,p999:63.514}},resources:{envoyGateway:{memory:{min:145.61,max:145.61,mean:145.61},cpu:{min:3.19,max:3.19,mean:3.19}},envoyProxy:{memory:{min:35.5,max:35.5,mean:35.5},cpu:{min:91.72,max:91.72,mean:91.72}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5066.99,totalRequests:152016,latency:{min:.386,mean:7.628,max:93.048,pstdev:13.7,percentiles:{p50:3.31,p75:5.414,p80:6.156,p90:10.289,p95:51.75,p99:58.007,p999:66.938}},resources:{envoyGateway:{memory:{min:156.12,max:156.12,mean:156.12},cpu:{min:15.73,max:15.73,mean:15.73}},envoyProxy:{memory:{min:55.56,max:55.56,mean:55.56},cpu:{min:124.54,max:124.54,mean:124.54}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5098.53,totalRequests:152960,latency:{min:.373,mean:7.203,max:108.142,pstdev:13.209,percentiles:{p50:3.161,p75:5.083,p80:5.791,p90:9.292,p95:50.372,p99:56.864,p999:67.85}},resources:{envoyGateway:{memory:{min:181.23,max:181.23,mean:181.23},cpu:{min:28.35,max:28.35,mean:28.35}},envoyProxy:{memory:{min:73.6,max:73.6,mean:73.6},cpu:{min:158.01,max:158.01,mean:158.01}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5048.96,totalRequests:151469,latency:{min:.366,mean:7.462,max:99.799,pstdev:13.676,percentiles:{p50:3.122,p75:5.245,p80:6.05,p90:10.398,p95:50.685,p99:59.639,p999:74.547}},resources:{envoyGateway:{memory:{min:196.57,max:196.57,mean:196.57},cpu:{min:61.62,max:61.62,mean:61.62}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:196.43,max:196.43,mean:196.43}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5116.49,totalRequests:153495,latency:{min:.373,mean:7.373,max:79.749,pstdev:13.231,percentiles:{p50:3.334,p75:5.268,p80:5.935,p90:9.436,p95:50.972,p99:56.68,p999:62.969}},resources:{envoyGateway:{memory:{min:213.36,max:213.36,mean:213.36},cpu:{min:114.56,max:114.56,mean:114.56}},envoyProxy:{memory:{min:109.79,max:109.79,mean:109.79},cpu:{min:357.84,max:357.84,mean:357.84}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5128.63,totalRequests:153859,latency:{min:.38,mean:6.787,max:76.259,pstdev:12.813,percentiles:{p50:2.982,p75:4.725,p80:5.33,p90:8.194,p95:50.354,p99:56.367,p999:61.741}},resources:{envoyGateway:{memory:{min:217.34,max:217.34,mean:217.34},cpu:{min:113.9,max:113.9,mean:113.9}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:327.37,max:327.37,mean:327.37}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5217.06,totalRequests:156516,latency:{min:.386,mean:7.182,max:93.491,pstdev:12.999,percentiles:{p50:3.211,p75:5.188,p80:5.872,p90:9.449,p95:50.083,p99:56.135,p999:63.309}},resources:{envoyGateway:{memory:{min:220.2,max:220.2,mean:220.2},cpu:{min:112.64,max:112.64,mean:112.64}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:296.73,max:296.73,mean:296.73}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5033.4,totalRequests:151002,latency:{min:.38,mean:6.522,max:92.626,pstdev:12.472,percentiles:{p50:2.849,p75:4.643,p80:5.272,p90:8.064,p95:49.35,p99:55.799,p999:64.323}},resources:{envoyGateway:{memory:{min:201.77,max:201.77,mean:201.77},cpu:{min:102.25,max:102.25,mean:102.25}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:264.74,max:264.74,mean:264.74}}},poolOverflow:365,upstreamConnections:35},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5061.34,totalRequests:151843,latency:{min:.393,mean:7.429,max:99.934,pstdev:13.552,percentiles:{p50:3.227,p75:5.18,p80:5.867,p90:9.747,p95:51.32,p99:58.009,p999:68.829}},resources:{envoyGateway:{memory:{min:173.04,max:173.04,mean:173.04},cpu:{min:91.12,max:91.12,mean:91.12}},envoyProxy:{memory:{min:119.73,max:119.73,mean:119.73},cpu:{min:231.98,max:231.98,mean:231.98}}},poolOverflow:360,upstreamConnections:40}]},xee={metadata:{version:"1.3.0",runId:"1.3.0-1750189826772",date:"2025-01-31",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.3.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.3.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5297.23,totalRequests:158917,latency:{min:.371,mean:6.861,max:69.562,pstdev:12.096,percentiles:{p50:3.223,p75:5.219,p80:5.926,p90:9.36,p95:48.029,p99:54.945,p999:60.096}},resources:{envoyGateway:{memory:{min:116.36,max:116.36,mean:116.36},cpu:{min:.77,max:.77,mean:.77}},envoyProxy:{memory:{min:25.3,max:25.3,mean:25.3},cpu:{min:30.42,max:30.42,mean:30.42}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5276.06,totalRequests:158285,latency:{min:.372,mean:6.781,max:81.436,pstdev:12.685,percentiles:{p50:3.035,p75:4.783,p80:5.41,p90:8.21,p95:50.042,p99:55.861,p999:61.739}},resources:{envoyGateway:{memory:{min:135.97,max:135.97,mean:135.97},cpu:{min:1.53,max:1.53,mean:1.53}},envoyProxy:{memory:{min:31.45,max:31.45,mean:31.45},cpu:{min:60.97,max:60.97,mean:60.97}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5248.15,totalRequests:157445,latency:{min:.386,mean:6.832,max:83.939,pstdev:12.879,percentiles:{p50:2.957,p75:4.826,p80:5.504,p90:8.587,p95:50.454,p99:56.524,p999:63.15}},resources:{envoyGateway:{memory:{min:128.67,max:128.67,mean:128.67},cpu:{min:2.88,max:2.88,mean:2.88}},envoyProxy:{memory:{min:35.62,max:35.62,mean:35.62},cpu:{min:91.69,max:91.69,mean:91.69}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5190.05,totalRequests:155708,latency:{min:.374,mean:6.735,max:105.82,pstdev:12.667,percentiles:{p50:2.997,p75:4.715,p80:5.323,p90:8.205,p95:49.692,p99:56.199,p999:64.403}},resources:{envoyGateway:{memory:{min:147.27,max:147.27,mean:147.27},cpu:{min:15.8,max:15.8,mean:15.8}},envoyProxy:{memory:{min:61.52,max:61.52,mean:61.52},cpu:{min:124.52,max:124.52,mean:124.52}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5171.63,totalRequests:155149,latency:{min:.345,mean:7.139,max:89.923,pstdev:13.21,percentiles:{p50:3.191,p75:5.039,p80:5.68,p90:8.824,p95:50.767,p99:57.397,p999:67.665}},resources:{envoyGateway:{memory:{min:158.88,max:158.88,mean:158.88},cpu:{min:28.37,max:28.37,mean:28.37}},envoyProxy:{memory:{min:76,max:76,mean:76},cpu:{min:157.59,max:157.59,mean:157.59}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:4998.06,totalRequests:149944,latency:{min:.371,mean:6.95,max:98.525,pstdev:13.111,percentiles:{p50:3.057,p75:4.816,p80:5.416,p90:8.383,p95:50.27,p99:57.946,p999:69.038}},resources:{envoyGateway:{memory:{min:182.71,max:182.71,mean:182.71},cpu:{min:61.79,max:61.79,mean:61.79}},envoyProxy:{memory:{min:122.12,max:122.12,mean:122.12},cpu:{min:194.7,max:194.7,mean:194.7}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5224.35,totalRequests:156731,latency:{min:.376,mean:6.87,max:73.203,pstdev:12.827,percentiles:{p50:3.06,p75:4.817,p80:5.428,p90:8.28,p95:50.618,p99:56.178,p999:61.28}},resources:{envoyGateway:{memory:{min:209.85,max:209.85,mean:209.85},cpu:{min:114.89,max:114.89,mean:114.89}},envoyProxy:{memory:{min:110.5,max:110.5,mean:110.5},cpu:{min:356.13,max:356.13,mean:356.13}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5247.75,totalRequests:157436,latency:{min:.383,mean:6.991,max:88.027,pstdev:12.998,percentiles:{p50:3.091,p75:4.901,p80:5.532,p90:8.568,p95:50.655,p99:56.272,p999:62.16}},resources:{envoyGateway:{memory:{min:208.95,max:208.95,mean:208.95},cpu:{min:114.35,max:114.35,mean:114.35}},envoyProxy:{memory:{min:122.19,max:122.19,mean:122.19},cpu:{min:325.78,max:325.78,mean:325.78}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5201.69,totalRequests:156051,latency:{min:.38,mean:7.027,max:78.663,pstdev:12.995,percentiles:{p50:3.129,p75:4.963,p80:5.6,p90:8.642,p95:50.726,p99:56.254,p999:61.509}},resources:{envoyGateway:{memory:{min:211.34,max:211.34,mean:211.34},cpu:{min:113.23,max:113.23,mean:113.23}},envoyProxy:{memory:{min:122.17,max:122.17,mean:122.17},cpu:{min:295.15,max:295.15,mean:295.15}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5206.95,totalRequests:156214,latency:{min:.386,mean:6.893,max:92.049,pstdev:12.874,percentiles:{p50:3.088,p75:4.898,p80:5.548,p90:8.444,p95:50.268,p99:56.334,p999:65.038}},resources:{envoyGateway:{memory:{min:158.73,max:158.73,mean:158.73},cpu:{min:102.79,max:102.79,mean:102.79}},envoyProxy:{memory:{min:122.15,max:122.15,mean:122.15},cpu:{min:263,max:263,mean:263}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5150.23,totalRequests:154507,latency:{min:.375,mean:6.786,max:84.877,pstdev:12.812,percentiles:{p50:3.009,p75:4.734,p80:5.34,p90:8.236,p95:50.247,p99:56.647,p999:65.042}},resources:{envoyGateway:{memory:{min:168.04,max:168.04,mean:168.04},cpu:{min:91.51,max:91.51,mean:91.51}},envoyProxy:{memory:{min:122.14,max:122.14,mean:122.14},cpu:{min:230.49,max:230.49,mean:230.49}}},poolOverflow:363,upstreamConnections:37}]},wee={metadata:{version:"1.2.8",runId:"1.2.8-1750189826771",date:"2025-03-25",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.8",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.8/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5878.23,totalRequests:176347,latency:{min:.376,mean:9.154,max:75.661,pstdev:14.181,percentiles:{p50:4.294,p75:7.182,p80:8.292,p90:22.716,p95:52.056,p99:58.071,p999:64.841}},resources:{envoyGateway:{memory:{min:108.89,max:108.89,mean:108.89},cpu:{min:.77,max:.77,mean:.77}},envoyProxy:{memory:{min:28.23,max:28.23,mean:28.23},cpu:{min:30.48,max:30.48,mean:30.48}}},poolOverflow:342,upstreamConnections:58},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5582.21,totalRequests:167469,latency:{min:.359,mean:6.378,max:69.967,pstdev:12.106,percentiles:{p50:2.864,p75:4.529,p80:5.113,p90:7.717,p95:48.431,p99:54.521,p999:59.967}},resources:{envoyGateway:{memory:{min:132.62,max:132.62,mean:132.62},cpu:{min:1.54,max:1.54,mean:1.54}},envoyProxy:{memory:{min:32.39,max:32.39,mean:32.39},cpu:{min:60.99,max:60.99,mean:60.99}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5454.1,totalRequests:163623,latency:{min:.368,mean:6.738,max:72.437,pstdev:12.216,percentiles:{p50:3.318,p75:5.037,p80:5.581,p90:8.092,p95:47.886,p99:53.829,p999:60.2}},resources:{envoyGateway:{memory:{min:135.66,max:135.66,mean:135.66},cpu:{min:2.91,max:2.91,mean:2.91}},envoyProxy:{memory:{min:38.6,max:38.6,mean:38.6},cpu:{min:91.91,max:91.91,mean:91.91}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5496.5,totalRequests:164898,latency:{min:.375,mean:6.453,max:103.043,pstdev:12.191,percentiles:{p50:2.887,p75:4.603,p80:5.209,p90:7.967,p95:48.15,p99:54.63,p999:63.743}},resources:{envoyGateway:{memory:{min:147.15,max:147.15,mean:147.15},cpu:{min:15.47,max:15.47,mean:15.47}},envoyProxy:{memory:{min:60.75,max:60.75,mean:60.75},cpu:{min:125.31,max:125.31,mean:125.31}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5351.8,totalRequests:160554,latency:{min:.377,mean:6.516,max:93.298,pstdev:12.549,percentiles:{p50:2.857,p75:4.496,p80:5.076,p90:7.615,p95:49.512,p99:55.822,p999:65.318}},resources:{envoyGateway:{memory:{min:155.79,max:155.79,mean:155.79},cpu:{min:28.01,max:28.01,mean:28.01}},envoyProxy:{memory:{min:82.96,max:82.96,mean:82.96},cpu:{min:159.29,max:159.29,mean:159.29}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5102.69,totalRequests:153086,latency:{min:.358,mean:6.968,max:108.298,pstdev:13.304,percentiles:{p50:2.979,p75:4.802,p80:5.441,p90:8.343,p95:50.37,p99:60.203,p999:71.446}},resources:{envoyGateway:{memory:{min:190.03,max:190.03,mean:190.03},cpu:{min:61.69,max:61.69,mean:61.69}},envoyProxy:{memory:{min:133.22,max:133.22,mean:133.22},cpu:{min:199.84,max:199.84,mean:199.84}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5424.03,totalRequests:162721,latency:{min:.362,mean:6.57,max:73.609,pstdev:12.562,percentiles:{p50:2.923,p75:4.626,p80:5.209,p90:7.751,p95:49.96,p99:55.525,p999:60.127}},resources:{envoyGateway:{memory:{min:127.89,max:127.89,mean:127.89},cpu:{min:114.69,max:114.69,mean:114.69}},envoyProxy:{memory:{min:112.11,max:112.11,mean:112.11},cpu:{min:363.01,max:363.01,mean:363.01}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5454.96,totalRequests:163653,latency:{min:.363,mean:6.397,max:73.404,pstdev:12.347,percentiles:{p50:2.884,p75:4.452,p80:4.989,p90:7.3,p95:49.477,p99:55.369,p999:61.495}},resources:{envoyGateway:{memory:{min:136.28,max:136.28,mean:136.28},cpu:{min:114.05,max:114.05,mean:114.05}},envoyProxy:{memory:{min:114.79,max:114.79,mean:114.79},cpu:{min:332.54,max:332.54,mean:332.54}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5402.5,totalRequests:162075,latency:{min:.366,mean:6.575,max:127.266,pstdev:12.484,percentiles:{p50:2.94,p75:4.6,p80:5.162,p90:7.727,p95:49.549,p99:55.334,p999:61.478}},resources:{envoyGateway:{memory:{min:140.91,max:140.91,mean:140.91},cpu:{min:112.87,max:112.87,mean:112.87}},envoyProxy:{memory:{min:114.76,max:114.76,mean:114.76},cpu:{min:301.85,max:301.85,mean:301.85}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5498.81,totalRequests:164969,latency:{min:.349,mean:6.325,max:84.213,pstdev:12.296,percentiles:{p50:2.789,p75:4.396,p80:4.944,p90:7.293,p95:48.961,p99:55.212,p999:65.019}},resources:{envoyGateway:{memory:{min:148.36,max:148.36,mean:148.36},cpu:{min:102.53,max:102.53,mean:102.53}},envoyProxy:{memory:{min:133.35,max:133.35,mean:133.35},cpu:{min:269.43,max:269.43,mean:269.43}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5308.76,totalRequests:159263,latency:{min:.361,mean:6.727,max:98.807,pstdev:12.828,percentiles:{p50:2.916,p75:4.65,p80:5.273,p90:8.161,p95:49.971,p99:56.84,p999:67.182}},resources:{envoyGateway:{memory:{min:157.93,max:157.93,mean:157.93},cpu:{min:91.26,max:91.26,mean:91.26}},envoyProxy:{memory:{min:133.2,max:133.2,mean:133.2},cpu:{min:236.02,max:236.02,mean:236.02}}},poolOverflow:362,upstreamConnections:38}]},bee={metadata:{version:"1.2.7",runId:"1.2.7-1750189826769",date:"2025-03-06",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.7",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.7/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5984.83,totalRequests:179545,latency:{min:.402,mean:12.033,max:92.835,pstdev:16.725,percentiles:{p50:5.655,p75:9.809,p80:11.804,p90:49.971,p95:55.76,p99:64.241,p999:73.961}},resources:{envoyGateway:{memory:{min:112.35,max:112.35,mean:112.35},cpu:{min:.76,max:.76,mean:.76}},envoyProxy:{memory:{min:28.29,max:28.29,mean:28.29},cpu:{min:30.49,max:30.49,mean:30.49}}},poolOverflow:323,upstreamConnections:77},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5564.85,totalRequests:166949,latency:{min:.362,mean:6.416,max:73.261,pstdev:12.268,percentiles:{p50:2.855,p75:4.514,p80:5.094,p90:7.66,p95:49.031,p99:54.939,p999:60.436}},resources:{envoyGateway:{memory:{min:125.94,max:125.94,mean:125.94},cpu:{min:1.52,max:1.52,mean:1.52}},envoyProxy:{memory:{min:34.46,max:34.46,mean:34.46},cpu:{min:61.11,max:61.11,mean:61.11}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5618.23,totalRequests:168547,latency:{min:.372,mean:6.834,max:85.766,pstdev:12.643,percentiles:{p50:3.107,p75:4.954,p80:5.56,p90:8.454,p95:49.485,p99:55.513,p999:61.272}},resources:{envoyGateway:{memory:{min:132.05,max:132.05,mean:132.05},cpu:{min:2.92,max:2.92,mean:2.92}},envoyProxy:{memory:{min:40.63,max:40.63,mean:40.63},cpu:{min:92.02,max:92.02,mean:92.02}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5506.26,totalRequests:165193,latency:{min:.383,mean:6.67,max:85.905,pstdev:12.677,percentiles:{p50:2.946,p75:4.659,p80:5.243,p90:7.891,p95:49.846,p99:56.096,p999:65.185}},resources:{envoyGateway:{memory:{min:146.09,max:146.09,mean:146.09},cpu:{min:15.43,max:15.43,mean:15.43}},envoyProxy:{memory:{min:62.86,max:62.86,mean:62.86},cpu:{min:125.21,max:125.21,mean:125.21}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5580.92,totalRequests:167428,latency:{min:.31,mean:6.716,max:89.178,pstdev:12.233,percentiles:{p50:3.157,p75:4.861,p80:5.446,p90:8.231,p95:47.419,p99:54.634,p999:65.587}},resources:{envoyGateway:{memory:{min:163.49,max:163.49,mean:163.49},cpu:{min:28.15,max:28.15,mean:28.15}},envoyProxy:{memory:{min:83.07,max:83.07,mean:83.07},cpu:{min:159.15,max:159.15,mean:159.15}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5298.3,totalRequests:158951,latency:{min:.369,mean:6.537,max:122.015,pstdev:12.654,percentiles:{p50:2.914,p75:4.472,p80:5.012,p90:7.402,p95:48.639,p99:58.097,p999:69.103}},resources:{envoyGateway:{memory:{min:187.81,max:187.81,mean:187.81},cpu:{min:62.41,max:62.41,mean:62.41}},envoyProxy:{memory:{min:133.27,max:133.27,mean:133.27},cpu:{min:199.13,max:199.13,mean:199.13}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5623.57,totalRequests:168711,latency:{min:.38,mean:7.19,max:75.063,pstdev:13.103,percentiles:{p50:3.211,p75:5.102,p80:5.772,p90:9.144,p95:50.722,p99:56.26,p999:61.515}},resources:{envoyGateway:{memory:{min:132.38,max:132.38,mean:132.38},cpu:{min:116.08,max:116.08,mean:116.08}},envoyProxy:{memory:{min:128.69,max:128.69,mean:128.69},cpu:{min:362.3,max:362.3,mean:362.3}}},poolOverflow:357,upstreamConnections:43},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5516.59,totalRequests:165498,latency:{min:.329,mean:6.044,max:69.902,pstdev:11.632,percentiles:{p50:2.893,p75:4.337,p80:4.79,p90:6.742,p95:47.155,p99:53.372,p999:58.073}},resources:{envoyGateway:{memory:{min:144.02,max:144.02,mean:144.02},cpu:{min:115.5,max:115.5,mean:115.5}},envoyProxy:{memory:{min:129.14,max:129.14,mean:129.14},cpu:{min:331.76,max:331.76,mean:331.76}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5515.82,totalRequests:165475,latency:{min:.38,mean:6.483,max:79.159,pstdev:12.363,percentiles:{p50:2.872,p75:4.545,p80:5.131,p90:7.76,p95:49.19,p99:55.408,p999:61.89}},resources:{envoyGateway:{memory:{min:135.79,max:135.79,mean:135.79},cpu:{min:114.36,max:114.36,mean:114.36}},envoyProxy:{memory:{min:109,max:109,mean:109},cpu:{min:301.13,max:301.13,mean:301.13}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5403.53,totalRequests:162106,latency:{min:.354,mean:6.429,max:83.423,pstdev:12.305,percentiles:{p50:2.864,p75:4.496,p80:5.072,p90:7.504,p95:48.885,p99:55.414,p999:63.565}},resources:{envoyGateway:{memory:{min:155.42,max:155.42,mean:155.42},cpu:{min:103.9,max:103.9,mean:103.9}},envoyProxy:{memory:{min:133.59,max:133.59,mean:133.59},cpu:{min:268.85,max:268.85,mean:268.85}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5405.24,totalRequests:162162,latency:{min:.387,mean:6.615,max:90.812,pstdev:12.66,percentiles:{p50:2.913,p75:4.593,p80:5.174,p90:7.866,p95:49.461,p99:56.51,p999:67.248}},resources:{envoyGateway:{memory:{min:165.58,max:165.58,mean:165.58},cpu:{min:92.35,max:92.35,mean:92.35}},envoyProxy:{memory:{min:133.42,max:133.42,mean:133.42},cpu:{min:235.87,max:235.87,mean:235.87}}},poolOverflow:362,upstreamConnections:38}]},See={metadata:{version:"1.2.6",runId:"1.2.6-1750189826767",date:"2025-01-23",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.6",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.6/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5668.03,totalRequests:170041,latency:{min:.354,mean:6.713,max:73.658,pstdev:11.906,percentiles:{p50:3.142,p75:5.17,p80:5.865,p90:9.278,p95:47.425,p99:54.87,p999:59.602}},resources:{envoyGateway:{memory:{min:108.82,max:108.82,mean:108.82},cpu:{min:.76,max:.76,mean:.76}},envoyProxy:{memory:{min:25.38,max:25.38,mean:25.38},cpu:{min:30.51,max:30.51,mean:30.51}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5542.06,totalRequests:166262,latency:{min:.38,mean:6.117,max:73.658,pstdev:11.949,percentiles:{p50:2.749,p75:4.31,p80:4.842,p90:7.067,p95:48.484,p99:54.499,p999:59.725}},resources:{envoyGateway:{memory:{min:135.08,max:135.08,mean:135.08},cpu:{min:1.53,max:1.53,mean:1.53}},envoyProxy:{memory:{min:31.53,max:31.53,mean:31.53},cpu:{min:61.17,max:61.17,mean:61.17}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5556.06,totalRequests:166682,latency:{min:.363,mean:6.439,max:100.163,pstdev:12.297,percentiles:{p50:2.891,p75:4.506,p80:5.05,p90:7.595,p95:49.078,p99:54.935,p999:60.456}},resources:{envoyGateway:{memory:{min:140.09,max:140.09,mean:140.09},cpu:{min:2.88,max:2.88,mean:2.88}},envoyProxy:{memory:{min:37.7,max:37.7,mean:37.7},cpu:{min:91.98,max:91.98,mean:91.98}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5462.58,totalRequests:163882,latency:{min:.372,mean:6.376,max:78.544,pstdev:12.289,percentiles:{p50:2.853,p75:4.454,p80:5.002,p90:7.458,p95:49.076,p99:55.132,p999:63.879}},resources:{envoyGateway:{memory:{min:146.71,max:146.71,mean:146.71},cpu:{min:15.64,max:15.64,mean:15.64}},envoyProxy:{memory:{min:59.89,max:59.89,mean:59.89},cpu:{min:125.41,max:125.41,mean:125.41}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5427.5,totalRequests:162825,latency:{min:.359,mean:6.562,max:97.148,pstdev:12.598,percentiles:{p50:2.881,p75:4.518,p80:5.091,p90:7.774,p95:49.301,p99:56.102,p999:67.338}},resources:{envoyGateway:{memory:{min:155.26,max:155.26,mean:155.26},cpu:{min:28.52,max:28.52,mean:28.52}},envoyProxy:{memory:{min:82.08,max:82.08,mean:82.08},cpu:{min:159.72,max:159.72,mean:159.72}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5261.62,totalRequests:157849,latency:{min:.373,mean:6.972,max:115.06,pstdev:13.251,percentiles:{p50:3.015,p75:4.77,p80:5.385,p90:8.293,p95:50.296,p99:59.93,p999:70.59}},resources:{envoyGateway:{memory:{min:188.13,max:188.13,mean:188.13},cpu:{min:61.78,max:61.78,mean:61.78}},envoyProxy:{memory:{min:130.35,max:130.35,mean:130.35},cpu:{min:199.1,max:199.1,mean:199.1}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5543.17,totalRequests:166299,latency:{min:.36,mean:6.447,max:75.276,pstdev:12.396,percentiles:{p50:2.866,p75:4.486,p80:5.04,p90:7.527,p95:49.663,p99:55.24,p999:60.647}},resources:{envoyGateway:{memory:{min:129.36,max:129.36,mean:129.36},cpu:{min:115.21,max:115.21,mean:115.21}},envoyProxy:{memory:{min:122.58,max:122.58,mean:122.58},cpu:{min:362.6,max:362.6,mean:362.6}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5522.73,totalRequests:165682,latency:{min:.384,mean:6.098,max:68.321,pstdev:11.922,percentiles:{p50:2.776,p75:4.326,p80:4.838,p90:6.958,p95:48.431,p99:54.296,p999:58.857}},resources:{envoyGateway:{memory:{min:140.97,max:140.97,mean:140.97},cpu:{min:114.57,max:114.57,mean:114.57}},envoyProxy:{memory:{min:122.83,max:122.83,mean:122.83},cpu:{min:332.12,max:332.12,mean:332.12}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5500.66,totalRequests:165023,latency:{min:.36,mean:6.301,max:80.4,pstdev:12.064,percentiles:{p50:2.833,p75:4.483,p80:5.035,p90:7.574,p95:48.777,p99:54.876,p999:60.85}},resources:{envoyGateway:{memory:{min:132.45,max:132.45,mean:132.45},cpu:{min:113.5,max:113.5,mean:113.5}},envoyProxy:{memory:{min:122.84,max:122.84,mean:122.84},cpu:{min:301.26,max:301.26,mean:301.26}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5453.33,totalRequests:163603,latency:{min:.357,mean:6.324,max:86.024,pstdev:12.138,percentiles:{p50:2.842,p75:4.429,p80:4.967,p90:7.393,p95:48.201,p99:54.683,p999:65.251}},resources:{envoyGateway:{memory:{min:150.62,max:150.62,mean:150.62},cpu:{min:103.11,max:103.11,mean:103.11}},envoyProxy:{memory:{min:130.34,max:130.34,mean:130.34},cpu:{min:269.03,max:269.03,mean:269.03}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5402.96,totalRequests:162089,latency:{min:.371,mean:6.575,max:90.804,pstdev:12.621,percentiles:{p50:2.877,p75:4.543,p80:5.114,p90:7.832,p95:49.375,p99:56.092,p999:69.132}},resources:{envoyGateway:{memory:{min:159.25,max:159.25,mean:159.25},cpu:{min:91.66,max:91.66,mean:91.66}},envoyProxy:{memory:{min:130.34,max:130.34,mean:130.34},cpu:{min:235.83,max:235.83,mean:235.83}}},poolOverflow:362,upstreamConnections:38}]},Pee={metadata:{version:"1.2.5",runId:"1.2.5-1750189826766",date:"2025-01-14",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.5",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.5/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5704.46,totalRequests:171136,latency:{min:.37,mean:6.52,max:74.477,pstdev:11.781,percentiles:{p50:3.051,p75:4.913,p80:5.565,p90:8.7,p95:47.091,p99:54.638,p999:59.404}},resources:{envoyGateway:{memory:{min:112.07,max:112.07,mean:112.07},cpu:{min:.76,max:.76,mean:.76}},envoyProxy:{memory:{min:24.38,max:24.38,mean:24.38},cpu:{min:30.47,max:30.47,mean:30.47}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5647.86,totalRequests:169439,latency:{min:.379,mean:6.313,max:80.498,pstdev:11.935,percentiles:{p50:2.854,p75:4.55,p80:5.158,p90:7.82,p95:48.025,p99:54.39,p999:60.321}},resources:{envoyGateway:{memory:{min:123.4,max:123.4,mean:123.4},cpu:{min:1.48,max:1.48,mean:1.48}},envoyProxy:{memory:{min:30.55,max:30.55,mean:30.55},cpu:{min:61.09,max:61.09,mean:61.09}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5529.29,totalRequests:165879,latency:{min:.379,mean:6.24,max:73.539,pstdev:12.017,percentiles:{p50:2.818,p75:4.51,p80:5.068,p90:7.413,p95:48.3,p99:54.171,p999:59.308}},resources:{envoyGateway:{memory:{min:139.7,max:139.7,mean:139.7},cpu:{min:2.92,max:2.92,mean:2.92}},envoyProxy:{memory:{min:36.73,max:36.73,mean:36.73},cpu:{min:91.9,max:91.9,mean:91.9}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5542.3,totalRequests:166274,latency:{min:.365,mean:6.463,max:81.305,pstdev:12.357,percentiles:{p50:2.89,p75:4.545,p80:5.116,p90:7.585,p95:49.043,p99:55.365,p999:64.399}},resources:{envoyGateway:{memory:{min:146.11,max:146.11,mean:146.11},cpu:{min:15.2,max:15.2,mean:15.2}},envoyProxy:{memory:{min:58.91,max:58.91,mean:58.91},cpu:{min:124.96,max:124.96,mean:124.96}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5407.59,totalRequests:162228,latency:{min:.363,mean:6.396,max:88.236,pstdev:12.419,percentiles:{p50:2.816,p75:4.45,p80:5.012,p90:7.485,p95:48.762,p99:55.666,p999:67.457}},resources:{envoyGateway:{memory:{min:154.01,max:154.01,mean:154.01},cpu:{min:27.98,max:27.98,mean:27.98}},envoyProxy:{memory:{min:81.11,max:81.11,mean:81.11},cpu:{min:158.85,max:158.85,mean:158.85}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5247.32,totalRequests:157425,latency:{min:.374,mean:6.604,max:106.491,pstdev:12.903,percentiles:{p50:2.88,p75:4.514,p80:5.089,p90:7.639,p95:49.453,p99:58.75,p999:71.97}},resources:{envoyGateway:{memory:{min:183.52,max:183.52,mean:183.52},cpu:{min:61.85,max:61.85,mean:61.85}},envoyProxy:{memory:{min:129.33,max:129.33,mean:129.33},cpu:{min:198.98,max:198.98,mean:198.98}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5668.05,totalRequests:170048,latency:{min:.366,mean:6.143,max:73.551,pstdev:12.054,percentiles:{p50:2.726,p75:4.279,p80:4.799,p90:7.123,p95:48.988,p99:54.704,p999:58.812}},resources:{envoyGateway:{memory:{min:138.57,max:138.57,mean:138.57},cpu:{min:115.2,max:115.2,mean:115.2}},envoyProxy:{memory:{min:121.88,max:121.88,mean:121.88},cpu:{min:361.89,max:361.89,mean:361.89}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5579.16,totalRequests:167375,latency:{min:.353,mean:6.19,max:87.244,pstdev:12.028,percentiles:{p50:2.803,p75:4.357,p80:4.889,p90:7.11,p95:48.482,p99:54.329,p999:59.113}},resources:{envoyGateway:{memory:{min:132.83,max:132.83,mean:132.83},cpu:{min:114.63,max:114.63,mean:114.63}},envoyProxy:{memory:{min:122.16,max:122.16,mean:122.16},cpu:{min:331.47,max:331.47,mean:331.47}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5581.7,totalRequests:167453,latency:{min:.377,mean:6.525,max:72.724,pstdev:12.286,percentiles:{p50:2.929,p75:4.641,p80:5.219,p90:7.915,p95:48.732,p99:54.81,p999:61.45}},resources:{envoyGateway:{memory:{min:133.91,max:133.91,mean:133.91},cpu:{min:113.44,max:113.44,mean:113.44}},envoyProxy:{memory:{min:122.02,max:122.02,mean:122.02},cpu:{min:300.79,max:300.79,mean:300.79}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5447.53,totalRequests:163426,latency:{min:.368,mean:6.54,max:88.612,pstdev:12.451,percentiles:{p50:2.904,p75:4.546,p80:5.128,p90:7.692,p95:49.305,p99:55.422,p999:64.116}},resources:{envoyGateway:{memory:{min:145.28,max:145.28,mean:145.28},cpu:{min:102.98,max:102.98,mean:102.98}},envoyProxy:{memory:{min:129.93,max:129.93,mean:129.93},cpu:{min:268.5,max:268.5,mean:268.5}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5437.61,totalRequests:163132,latency:{min:.383,mean:6.527,max:102.998,pstdev:12.6,percentiles:{p50:2.827,p75:4.47,p80:5.07,p90:7.714,p95:49.029,p99:56.436,p999:66.684}},resources:{envoyGateway:{memory:{min:164.07,max:164.07,mean:164.07},cpu:{min:91.64,max:91.64,mean:91.64}},envoyProxy:{memory:{min:129.93,max:129.93,mean:129.93},cpu:{min:235.61,max:235.61,mean:235.61}}},poolOverflow:362,upstreamConnections:38}]},Oee={metadata:{version:"1.2.4",runId:"1.2.4-1750189826764",date:"2024-12-13",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.4",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.4/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5982.38,totalRequests:179472,latency:{min:.349,mean:6.011,max:83.349,pstdev:11.061,percentiles:{p50:2.829,p75:4.477,p80:5.098,p90:7.842,p95:43.255,p99:53.35,p999:59.346}},resources:{envoyGateway:{memory:{min:110.54,max:110.54,mean:110.54},cpu:{min:.77,max:.77,mean:.77}},envoyProxy:{memory:{min:24.25,max:24.25,mean:24.25},cpu:{min:30.44,max:30.44,mean:30.44}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5917.46,totalRequests:177524,latency:{min:.361,mean:6.164,max:70.909,pstdev:11.809,percentiles:{p50:2.843,p75:4.366,p80:4.876,p90:7.109,p95:47.788,p99:54.372,p999:59.932}},resources:{envoyGateway:{memory:{min:119.89,max:119.89,mean:119.89},cpu:{min:1.61,max:1.61,mean:1.61}},envoyProxy:{memory:{min:30.43,max:30.43,mean:30.43},cpu:{min:61.13,max:61.13,mean:61.13}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5930.25,totalRequests:177910,latency:{min:.398,mean:6.027,max:92.041,pstdev:11.76,percentiles:{p50:2.652,p75:4.198,p80:4.747,p90:7.135,p95:47.513,p99:55.083,p999:61.542}},resources:{envoyGateway:{memory:{min:129.08,max:129.08,mean:129.08},cpu:{min:3.05,max:3.05,mean:3.05}},envoyProxy:{memory:{min:36.57,max:36.57,mean:36.57},cpu:{min:92.01,max:92.01,mean:92.01}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5612.73,totalRequests:168382,latency:{min:.368,mean:6.361,max:108.085,pstdev:12.378,percentiles:{p50:2.817,p75:4.383,p80:4.929,p90:7.356,p95:48.795,p99:56.586,p999:68.399}},resources:{envoyGateway:{memory:{min:140.63,max:140.63,mean:140.63},cpu:{min:15.35,max:15.35,mean:15.35}},envoyProxy:{memory:{min:58.77,max:58.77,mean:58.77},cpu:{min:125.44,max:125.44,mean:125.44}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5799.01,totalRequests:173974,latency:{min:.378,mean:6.166,max:97.771,pstdev:11.964,percentiles:{p50:2.818,p75:4.251,p80:4.742,p90:6.922,p95:47.56,p99:55.281,p999:68.112}},resources:{envoyGateway:{memory:{min:152.5,max:152.5,mean:152.5},cpu:{min:28.38,max:28.38,mean:28.38}},envoyProxy:{memory:{min:78.94,max:78.94,mean:78.94},cpu:{min:159.67,max:159.67,mean:159.67}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5474.43,totalRequests:164233,latency:{min:.386,mean:6.534,max:109.809,pstdev:12.936,percentiles:{p50:2.656,p75:4.361,p80:5.013,p90:8.074,p95:49.516,p99:60.213,p999:73.678}},resources:{envoyGateway:{memory:{min:183.98,max:183.98,mean:183.98},cpu:{min:62.29,max:62.29,mean:62.29}},envoyProxy:{memory:{min:131.16,max:131.16,mean:131.16},cpu:{min:200.46,max:200.46,mean:200.46}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5816.39,totalRequests:174492,latency:{min:.34,mean:6.131,max:85.209,pstdev:11.868,percentiles:{p50:2.73,p75:4.264,p80:4.816,p90:7.369,p95:47.933,p99:54.984,p999:61.82}},resources:{envoyGateway:{memory:{min:195,max:195,mean:195},cpu:{min:116.53,max:116.53,mean:116.53}},envoyProxy:{memory:{min:120.37,max:120.37,mean:120.37},cpu:{min:363.61,max:363.61,mean:363.61}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5848.8,totalRequests:175470,latency:{min:.372,mean:6.285,max:77.979,pstdev:12.136,percentiles:{p50:2.76,p75:4.334,p80:4.906,p90:7.492,p95:48.553,p99:55.732,p999:63.037}},resources:{envoyGateway:{memory:{min:205.2,max:205.2,mean:205.2},cpu:{min:115.88,max:115.88,mean:115.88}},envoyProxy:{memory:{min:120.26,max:120.26,mean:120.26},cpu:{min:333.06,max:333.06,mean:333.06}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5897.55,totalRequests:176927,latency:{min:.365,mean:6.054,max:78.041,pstdev:11.77,percentiles:{p50:2.761,p75:4.253,p80:4.77,p90:6.934,p95:47.628,p99:54.935,p999:62.232}},resources:{envoyGateway:{memory:{min:201.78,max:201.78,mean:201.78},cpu:{min:114.84,max:114.84,mean:114.84}},envoyProxy:{memory:{min:122.23,max:122.23,mean:122.23},cpu:{min:302.66,max:302.66,mean:302.66}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5764.69,totalRequests:172941,latency:{min:.376,mean:6.54,max:87.822,pstdev:12.528,percentiles:{p50:2.847,p75:4.511,p80:5.118,p90:7.907,p95:49.336,p99:56.737,p999:66.895}},resources:{envoyGateway:{memory:{min:237.36,max:237.36,mean:237.36},cpu:{min:104.3,max:104.3,mean:104.3}},envoyProxy:{memory:{min:131.2,max:131.2,mean:131.2},cpu:{min:270.32,max:270.32,mean:270.32}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5709.58,totalRequests:171290,latency:{min:.35,mean:6.172,max:93.663,pstdev:11.978,percentiles:{p50:2.864,p75:4.285,p80:4.782,p90:6.98,p95:47.689,p99:55.115,p999:67.44}},resources:{envoyGateway:{memory:{min:158.41,max:158.41,mean:158.41},cpu:{min:92.69,max:92.69,mean:92.69}},envoyProxy:{memory:{min:131.32,max:131.32,mean:131.32},cpu:{min:236.85,max:236.85,mean:236.85}}},poolOverflow:363,upstreamConnections:37}]},kee={metadata:{version:"1.2.3",runId:"1.2.3-1750189826763",date:"2024-12-02",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.3",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.3/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6222.52,totalRequests:186680,latency:{min:.349,mean:6.177,max:70.643,pstdev:11.464,percentiles:{p50:2.879,p75:4.52,p80:5.082,p90:7.684,p95:46.213,p99:54.147,p999:60.25}},resources:{envoyGateway:{memory:{min:110.2,max:110.2,mean:110.2},cpu:{min:.68,max:.68,mean:.68}},envoyProxy:{memory:{min:25.89,max:25.89,mean:25.89},cpu:{min:30.33,max:30.33,mean:30.33}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6170.38,totalRequests:185112,latency:{min:.37,mean:5.77,max:72.798,pstdev:11.358,percentiles:{p50:2.657,p75:4.054,p80:4.535,p90:6.537,p95:46.632,p99:53.751,p999:59.174}},resources:{envoyGateway:{memory:{min:122.48,max:122.48,mean:122.48},cpu:{min:1.42,max:1.42,mean:1.42}},envoyProxy:{memory:{min:32.05,max:32.05,mean:32.05},cpu:{min:60.88,max:60.88,mean:60.88}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6085.51,totalRequests:182567,latency:{min:.365,mean:5.863,max:84.721,pstdev:11.54,percentiles:{p50:2.605,p75:4.127,p80:4.662,p90:7.048,p95:46.759,p99:54.556,p999:61.736}},resources:{envoyGateway:{memory:{min:131.06,max:131.06,mean:131.06},cpu:{min:2.8,max:2.8,mean:2.8}},envoyProxy:{memory:{min:38.19,max:38.19,mean:38.19},cpu:{min:91.64,max:91.64,mean:91.64}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:6032.83,totalRequests:180985,latency:{min:.362,mean:6.079,max:79.421,pstdev:11.806,percentiles:{p50:2.707,p75:4.272,p80:4.832,p90:7.327,p95:47.441,p99:54.743,p999:65.808}},resources:{envoyGateway:{memory:{min:142.98,max:142.98,mean:142.98},cpu:{min:15.04,max:15.04,mean:15.04}},envoyProxy:{memory:{min:60.39,max:60.39,mean:60.39},cpu:{min:124.47,max:124.47,mean:124.47}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5773.98,totalRequests:173223,latency:{min:.344,mean:6.36,max:79.355,pstdev:12.473,percentiles:{p50:2.707,p75:4.299,p80:4.888,p90:7.643,p95:49.309,p99:57.382,p999:68.141}},resources:{envoyGateway:{memory:{min:160.84,max:160.84,mean:160.84},cpu:{min:27.66,max:27.66,mean:27.66}},envoyProxy:{memory:{min:80.58,max:80.58,mean:80.58},cpu:{min:156.97,max:156.97,mean:156.97}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5776.08,totalRequests:173283,latency:{min:.361,mean:6.194,max:89.714,pstdev:12.241,percentiles:{p50:2.703,p75:4.241,p80:4.791,p90:7.296,p95:47.755,p99:58.537,p999:70.676}},resources:{envoyGateway:{memory:{min:186.49,max:186.49,mean:186.49},cpu:{min:61.39,max:61.39,mean:61.39}},envoyProxy:{memory:{min:130.82,max:130.82,mean:130.82},cpu:{min:196.17,max:196.17,mean:196.17}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6128.86,totalRequests:183866,latency:{min:.351,mean:5.824,max:73.633,pstdev:11.47,percentiles:{p50:2.578,p75:4.038,p80:4.57,p90:6.823,p95:46.927,p99:54.392,p999:60.213}},resources:{envoyGateway:{memory:{min:218.36,max:218.36,mean:218.36},cpu:{min:114.4,max:114.4,mean:114.4}},envoyProxy:{memory:{min:118.8,max:118.8,mean:118.8},cpu:{min:358.03,max:358.03,mean:358.03}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6065.62,totalRequests:181969,latency:{min:.378,mean:5.877,max:82.526,pstdev:11.643,percentiles:{p50:2.588,p75:4.048,p80:4.587,p90:6.876,p95:47.429,p99:54.71,p999:62.111}},resources:{envoyGateway:{memory:{min:222.42,max:222.42,mean:222.42},cpu:{min:113.86,max:113.86,mean:113.86}},envoyProxy:{memory:{min:119.23,max:119.23,mean:119.23},cpu:{min:327.6,max:327.6,mean:327.6}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:6045.71,totalRequests:181360,latency:{min:.388,mean:6.024,max:80.216,pstdev:11.596,percentiles:{p50:2.802,p75:4.253,p80:4.761,p90:6.951,p95:47.183,p99:54.065,p999:59.455}},resources:{envoyGateway:{memory:{min:142.37,max:142.37,mean:142.37},cpu:{min:112.77,max:112.77,mean:112.77}},envoyProxy:{memory:{min:119.54,max:119.54,mean:119.54},cpu:{min:296.95,max:296.95,mean:296.95}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5956.66,totalRequests:178700,latency:{min:.379,mean:6.153,max:85.528,pstdev:12.032,percentiles:{p50:2.64,p75:4.362,p80:4.961,p90:7.625,p95:47.886,p99:55.965,p999:65.695}},resources:{envoyGateway:{memory:{min:148.72,max:148.72,mean:148.72},cpu:{min:102.49,max:102.49,mean:102.49}},envoyProxy:{memory:{min:130.98,max:130.98,mean:130.98},cpu:{min:264.96,max:264.96,mean:264.96}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5958.61,totalRequests:178765,latency:{min:.362,mean:5.967,max:83.48,pstdev:11.671,percentiles:{p50:2.714,p75:4.156,p80:4.658,p90:6.839,p95:46.901,p99:54.601,p999:65.464}},resources:{envoyGateway:{memory:{min:164.87,max:164.87,mean:164.87},cpu:{min:91.25,max:91.25,mean:91.25}},envoyProxy:{memory:{min:130.98,max:130.98,mean:130.98},cpu:{min:231.98,max:231.98,mean:231.98}}},poolOverflow:363,upstreamConnections:37}]},Cee={metadata:{version:"1.2.2",runId:"1.2.2-1750189826761",date:"2024-11-28",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.2",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.2/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6249.74,totalRequests:187495,latency:{min:.333,mean:5.937,max:75.075,pstdev:10.895,percentiles:{p50:2.84,p75:4.501,p80:5.077,p90:7.64,p95:41.435,p99:53.243,p999:58.066}},resources:{envoyGateway:{memory:{min:106.26,max:106.26,mean:106.26},cpu:{min:.73,max:.73,mean:.73}},envoyProxy:{memory:{min:26.09,max:26.09,mean:26.09},cpu:{min:30.41,max:30.41,mean:30.41}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6140.58,totalRequests:184222,latency:{min:.373,mean:5.812,max:79.74,pstdev:11.513,percentiles:{p50:2.59,p75:4.071,p80:4.583,p90:6.812,p95:46.811,p99:54.179,p999:61.151}},resources:{envoyGateway:{memory:{min:131.24,max:131.24,mean:131.24},cpu:{min:1.34,max:1.34,mean:1.34}},envoyProxy:{memory:{min:32.26,max:32.26,mean:32.26},cpu:{min:60.74,max:60.74,mean:60.74}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6149.72,totalRequests:184494,latency:{min:.366,mean:5.813,max:89.935,pstdev:11.434,percentiles:{p50:2.637,p75:4.073,p80:4.561,p90:6.68,p95:46.505,p99:53.872,p999:60.348}},resources:{envoyGateway:{memory:{min:133.05,max:133.05,mean:133.05},cpu:{min:2.75,max:2.75,mean:2.75}},envoyProxy:{memory:{min:38.38,max:38.38,mean:38.38},cpu:{min:91.57,max:91.57,mean:91.57}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:6076.78,totalRequests:182305,latency:{min:.361,mean:6.031,max:87.502,pstdev:11.819,percentiles:{p50:2.675,p75:4.203,p80:4.751,p90:7.118,p95:47.147,p99:55.078,p999:67.106}},resources:{envoyGateway:{memory:{min:153.62,max:153.62,mean:153.62},cpu:{min:14.77,max:14.77,mean:14.77}},envoyProxy:{memory:{min:60.45,max:60.45,mean:60.45},cpu:{min:124.04,max:124.04,mean:124.04}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5928.89,totalRequests:177873,latency:{min:.336,mean:6.196,max:85.643,pstdev:12.032,percentiles:{p50:2.803,p75:4.338,p80:4.852,p90:7.143,p95:47.726,p99:55.619,p999:67.78}},resources:{envoyGateway:{memory:{min:145.79,max:145.79,mean:145.79},cpu:{min:27.17,max:27.17,mean:27.17}},envoyProxy:{memory:{min:80.64,max:80.64,mean:80.64},cpu:{min:157.65,max:157.65,mean:157.65}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5843.64,totalRequests:175314,latency:{min:.339,mean:6.452,max:101.912,pstdev:12.482,percentiles:{p50:2.79,p75:4.509,p80:5.136,p90:8.012,p95:47.702,p99:58.542,p999:74.014}},resources:{envoyGateway:{memory:{min:173.7,max:173.7,mean:173.7},cpu:{min:61.12,max:61.12,mean:61.12}},envoyProxy:{memory:{min:130.89,max:130.89,mean:130.89},cpu:{min:195.74,max:195.74,mean:195.74}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6096.9,totalRequests:182907,latency:{min:.365,mean:5.84,max:99.377,pstdev:11.326,percentiles:{p50:2.735,p75:4.188,p80:4.674,p90:6.654,p95:46.344,p99:53.444,p999:58.591}},resources:{envoyGateway:{memory:{min:230.99,max:230.99,mean:230.99},cpu:{min:114.22,max:114.22,mean:114.22}},envoyProxy:{memory:{min:121.56,max:121.56,mean:121.56},cpu:{min:358.71,max:358.71,mean:358.71}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6151.76,totalRequests:184556,latency:{min:.376,mean:5.805,max:84.885,pstdev:11.572,percentiles:{p50:2.52,p75:3.969,p80:4.498,p90:6.842,p95:46.837,p99:54.761,p999:62.57}},resources:{envoyGateway:{memory:{min:233.63,max:233.63,mean:233.63},cpu:{min:113.65,max:113.65,mean:113.65}},envoyProxy:{memory:{min:121.86,max:121.86,mean:121.86},cpu:{min:328.3,max:328.3,mean:328.3}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:6157.53,totalRequests:184729,latency:{min:.379,mean:5.964,max:75.988,pstdev:11.502,percentiles:{p50:2.743,p75:4.204,p80:4.695,p90:6.941,p95:46.497,p99:54.179,p999:62.005}},resources:{envoyGateway:{memory:{min:141.36,max:141.36,mean:141.36},cpu:{min:112.67,max:112.67,mean:112.67}},envoyProxy:{memory:{min:122.04,max:122.04,mean:122.04},cpu:{min:297.59,max:297.59,mean:297.59}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:6060.5,totalRequests:181818,latency:{min:.36,mean:6.022,max:92.483,pstdev:11.657,percentiles:{p50:2.685,p75:4.265,p80:4.811,p90:7.313,p95:46.495,p99:54.495,p999:64.219}},resources:{envoyGateway:{memory:{min:150.71,max:150.71,mean:150.71},cpu:{min:102.4,max:102.4,mean:102.4}},envoyProxy:{memory:{min:130.9,max:130.9,mean:130.9},cpu:{min:265.29,max:265.29,mean:265.29}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5966.83,totalRequests:179008,latency:{min:.343,mean:5.962,max:102.715,pstdev:11.763,percentiles:{p50:2.668,p75:4.125,p80:4.633,p90:6.863,p95:46.741,p99:54.929,p999:67.018}},resources:{envoyGateway:{memory:{min:162.62,max:162.62,mean:162.62},cpu:{min:91.03,max:91.03,mean:91.03}},envoyProxy:{memory:{min:131.05,max:131.05,mean:131.05},cpu:{min:232.55,max:232.55,mean:232.55}}},poolOverflow:363,upstreamConnections:37}]},Aee={metadata:{version:"1.2.1",runId:"1.2.1-1750189826759",date:"2024-11-07",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6110.53,totalRequests:183316,latency:{min:.337,mean:6.415,max:92.647,pstdev:11.35,percentiles:{p50:3.107,p75:5.037,p80:5.711,p90:8.782,p95:45.103,p99:53.942,p999:60.79}},resources:{envoyGateway:{memory:{min:111.18,max:111.18,mean:111.18},cpu:{min:.79,max:.79,mean:.79}},envoyProxy:{memory:{min:24.25,max:24.25,mean:24.25},cpu:{min:30.62,max:30.62,mean:30.62}}},poolOverflow:359,upstreamConnections:41},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6011.43,totalRequests:180343,latency:{min:.377,mean:6.244,max:72.724,pstdev:11.87,percentiles:{p50:2.835,p75:4.408,p80:4.939,p90:7.412,p95:47.611,p99:54.769,p999:61.716}},resources:{envoyGateway:{memory:{min:116.45,max:116.45,mean:116.45},cpu:{min:1.59,max:1.59,mean:1.59}},envoyProxy:{memory:{min:30.41,max:30.41,mean:30.41},cpu:{min:61.42,max:61.42,mean:61.42}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5961.65,totalRequests:178854,latency:{min:.37,mean:5.979,max:81.096,pstdev:11.586,percentiles:{p50:2.705,p75:4.189,p80:4.699,p90:7.03,p95:46.987,p99:54.095,p999:61.222}},resources:{envoyGateway:{memory:{min:128.02,max:128.02,mean:128.02},cpu:{min:3.04,max:3.04,mean:3.04}},envoyProxy:{memory:{min:36.55,max:36.55,mean:36.55},cpu:{min:92.49,max:92.49,mean:92.49}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5921.3,totalRequests:177639,latency:{min:.376,mean:6.208,max:100.098,pstdev:11.901,percentiles:{p50:2.77,p75:4.413,p80:5.009,p90:7.647,p95:46.934,p99:55.273,p999:68.509}},resources:{envoyGateway:{memory:{min:144.93,max:144.93,mean:144.93},cpu:{min:15.11,max:15.11,mean:15.11}},envoyProxy:{memory:{min:58.75,max:58.75,mean:58.75},cpu:{min:125.9,max:125.9,mean:125.9}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5876.24,totalRequests:176290,latency:{min:.365,mean:6.248,max:80.101,pstdev:12.134,percentiles:{p50:2.759,p75:4.348,p80:4.922,p90:7.422,p95:47.855,p99:56.041,p999:67.145}},resources:{envoyGateway:{memory:{min:155.94,max:155.94,mean:155.94},cpu:{min:27.72,max:27.72,mean:27.72}},envoyProxy:{memory:{min:80.95,max:80.95,mean:80.95},cpu:{min:159.58,max:159.58,mean:159.58}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5744.1,totalRequests:172323,latency:{min:.38,mean:6.374,max:100.245,pstdev:12.424,percentiles:{p50:2.775,p75:4.337,p80:4.899,p90:7.542,p95:47.699,p99:59.248,p999:71.761}},resources:{envoyGateway:{memory:{min:184.41,max:184.41,mean:184.41},cpu:{min:61.5,max:61.5,mean:61.5}},envoyProxy:{memory:{min:129.19,max:129.19,mean:129.19},cpu:{min:199.75,max:199.75,mean:199.75}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6028.67,totalRequests:180864,latency:{min:.361,mean:5.919,max:75.882,pstdev:11.427,percentiles:{p50:2.729,p75:4.244,p80:4.783,p90:6.934,p95:46.608,p99:53.897,p999:59.893}},resources:{envoyGateway:{memory:{min:229.41,max:229.41,mean:229.41},cpu:{min:114.16,max:114.16,mean:114.16}},envoyProxy:{memory:{min:121.69,max:121.69,mean:121.69},cpu:{min:363.78,max:363.78,mean:363.78}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6093.21,totalRequests:182799,latency:{min:.364,mean:5.859,max:73.809,pstdev:11.454,percentiles:{p50:2.634,p75:4.171,p80:4.702,p90:7.002,p95:46.548,p99:53.979,p999:62.793}},resources:{envoyGateway:{memory:{min:236.91,max:236.91,mean:236.91},cpu:{min:113.6,max:113.6,mean:113.6}},envoyProxy:{memory:{min:122.3,max:122.3,mean:122.3},cpu:{min:333.22,max:333.22,mean:333.22}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:6057.56,totalRequests:181727,latency:{min:.366,mean:5.898,max:83.623,pstdev:11.56,percentiles:{p50:2.628,p75:4.159,p80:4.695,p90:6.996,p95:46.897,p99:54.495,p999:61.849}},resources:{envoyGateway:{memory:{min:143.71,max:143.71,mean:143.71},cpu:{min:112.58,max:112.58,mean:112.58}},envoyProxy:{memory:{min:121.84,max:121.84,mean:121.84},cpu:{min:302.58,max:302.58,mean:302.58}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5899.93,totalRequests:176998,latency:{min:.329,mean:6.218,max:88.965,pstdev:12.007,percentiles:{p50:2.818,p75:4.388,p80:4.92,p90:7.204,p95:47.871,p99:55.517,p999:65.886}},resources:{envoyGateway:{memory:{min:154.24,max:154.24,mean:154.24},cpu:{min:102.3,max:102.3,mean:102.3}},envoyProxy:{memory:{min:129.34,max:129.34,mean:129.34},cpu:{min:270.21,max:270.21,mean:270.21}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5862.2,totalRequests:175868,latency:{min:.359,mean:6.106,max:107.622,pstdev:11.962,percentiles:{p50:2.648,p75:4.343,p80:4.933,p90:7.617,p95:47.341,p99:55.508,p999:69.103}},resources:{envoyGateway:{memory:{min:153.72,max:153.72,mean:153.72},cpu:{min:91.07,max:91.07,mean:91.07}},envoyProxy:{memory:{min:129.18,max:129.18,mean:129.18},cpu:{min:237.04,max:237.04,mean:237.04}}},poolOverflow:363,upstreamConnections:37}]},Eee={metadata:{version:"1.2.0",runId:"1.2.0-1750189826754",date:"2024-11-06",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.2.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.2.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6006.27,totalRequests:180191,latency:{min:.359,mean:6.202,max:74.358,pstdev:11.262,percentiles:{p50:2.976,p75:4.719,p80:5.33,p90:8.159,p95:44.003,p99:54.19,p999:59.357}},resources:{envoyGateway:{memory:{min:113.66,max:113.66,mean:113.66},cpu:{min:.75,max:.75,mean:.75}},envoyProxy:{memory:{min:25.55,max:25.55,mean:25.55},cpu:{min:30.41,max:30.41,mean:30.41}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5988.15,totalRequests:179650,latency:{min:.366,mean:6.093,max:82.386,pstdev:11.67,percentiles:{p50:2.838,p75:4.283,p80:4.798,p90:6.972,p95:47.523,p99:54.038,p999:59.813}},resources:{envoyGateway:{memory:{min:119.16,max:119.16,mean:119.16},cpu:{min:1.53,max:1.53,mean:1.53}},envoyProxy:{memory:{min:31.71,max:31.71,mean:31.71},cpu:{min:61.03,max:61.03,mean:61.03}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5930.13,totalRequests:177905,latency:{min:.374,mean:6.182,max:93.884,pstdev:11.844,percentiles:{p50:2.812,p75:4.42,p80:4.967,p90:7.339,p95:47.618,p99:54.661,p999:61.865}},resources:{envoyGateway:{memory:{min:123.35,max:123.35,mean:123.35},cpu:{min:2.89,max:2.89,mean:2.89}},envoyProxy:{memory:{min:37.86,max:37.86,mean:37.86},cpu:{min:91.87,max:91.87,mean:91.87}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5713.27,totalRequests:171401,latency:{min:.384,mean:6.405,max:105.545,pstdev:12.313,percentiles:{p50:2.832,p75:4.45,p80:5.057,p90:7.773,p95:48.732,p99:56.084,p999:66.22}},resources:{envoyGateway:{memory:{min:150.92,max:150.92,mean:150.92},cpu:{min:15.08,max:15.08,mean:15.08}},envoyProxy:{memory:{min:60.05,max:60.05,mean:60.05},cpu:{min:125.09,max:125.09,mean:125.09}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5689.03,totalRequests:170675,latency:{min:.365,mean:5.939,max:98.639,pstdev:11.585,percentiles:{p50:2.715,p75:4.258,p80:4.772,p90:7.055,p95:45.996,p99:54.368,p999:68.464}},resources:{envoyGateway:{memory:{min:156.97,max:156.97,mean:156.97},cpu:{min:27.62,max:27.62,mean:27.62}},envoyProxy:{memory:{min:82.26,max:82.26,mean:82.26},cpu:{min:158.86,max:158.86,mean:158.86}}},poolOverflow:365,upstreamConnections:35},{testName:"scale-up-httproutes-1000",routes:1e3,routesPerHostname:1,phase:"scaling-up",throughput:5407.08,totalRequests:162220,latency:{min:.371,mean:6.424,max:131.579,pstdev:12.473,percentiles:{p50:2.692,p75:4.503,p80:5.177,p90:8.264,p95:47.54,p99:58.488,p999:72.72}},resources:{envoyGateway:{memory:{min:215.93,max:215.93,mean:215.93},cpu:{min:61.56,max:61.56,mean:61.56}},envoyProxy:{memory:{min:130.5,max:130.5,mean:130.5},cpu:{min:197.45,max:197.45,mean:197.45}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5905.23,totalRequests:177157,latency:{min:.396,mean:6.205,max:92.979,pstdev:12.065,percentiles:{p50:2.713,p75:4.262,p80:4.832,p90:7.415,p95:48.306,p99:55.736,p999:63.318}},resources:{envoyGateway:{memory:{min:233.71,max:233.71,mean:233.71},cpu:{min:114.53,max:114.53,mean:114.53}},envoyProxy:{memory:{min:118.94,max:118.94,mean:118.94},cpu:{min:360.39,max:360.39,mean:360.39}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5793.19,totalRequests:173800,latency:{min:.385,mean:6.501,max:86.843,pstdev:12.452,percentiles:{p50:2.744,p75:4.568,p80:5.227,p90:8.494,p95:48.965,p99:56.467,p999:65.382}},resources:{envoyGateway:{memory:{min:202.08,max:202.08,mean:202.08},cpu:{min:113.96,max:113.96,mean:113.96}},envoyProxy:{memory:{min:121.24,max:121.24,mean:121.24},cpu:{min:329.91,max:329.91,mean:329.91}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5783.8,totalRequests:173514,latency:{min:.385,mean:6.179,max:85.405,pstdev:11.889,percentiles:{p50:2.707,p75:4.462,p80:5.071,p90:7.76,p95:47.423,p99:54.994,p999:64.567}},resources:{envoyGateway:{memory:{min:144.59,max:144.59,mean:144.59},cpu:{min:112.93,max:112.93,mean:112.93}},envoyProxy:{memory:{min:121.22,max:121.22,mean:121.22},cpu:{min:299.28,max:299.28,mean:299.28}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5804.51,totalRequests:174139,latency:{min:.384,mean:6.147,max:82.661,pstdev:11.892,percentiles:{p50:2.807,p75:4.284,p80:4.791,p90:7.039,p95:47.558,p99:55.162,p999:66.723}},resources:{envoyGateway:{memory:{min:160.23,max:160.23,mean:160.23},cpu:{min:102.85,max:102.85,mean:102.85}},envoyProxy:{memory:{min:130.62,max:130.62,mean:130.62},cpu:{min:267.09,max:267.09,mean:267.09}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-down",throughput:5804.87,totalRequests:174149,latency:{min:.368,mean:5.828,max:106.119,pstdev:11.561,percentiles:{p50:2.647,p75:4.078,p80:4.553,p90:6.656,p95:46.047,p99:55.025,p999:66.633}},resources:{envoyGateway:{memory:{min:155.88,max:155.88,mean:155.88},cpu:{min:91.5,max:91.5,mean:91.5}},envoyProxy:{memory:{min:130.61,max:130.61,mean:130.61},cpu:{min:234.47,max:234.47,mean:234.47}}},poolOverflow:365,upstreamConnections:35}]},Ree={metadata:{version:"1.1.4",runId:"1.1.4-1750190329987",date:"2024-12-13",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.4",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.4/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5971.73,totalRequests:179152,latency:{min:.354,mean:6.247,max:97.591,pstdev:11.371,percentiles:{p50:2.948,p75:4.694,p80:5.352,p90:8.42,p95:44.519,p99:54.398,p999:62.244}},resources:{envoyGateway:{memory:{min:82.79,max:82.79,mean:82.79},cpu:{min:1.5000000000000002,max:1.5000000000000002,mean:1.5000000000000002}},envoyProxy:{memory:{min:24.11,max:24.11,mean:24.11},cpu:{min:101.53333333333335,max:101.53333333333335,mean:101.53333333333335}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5957.22,totalRequests:178717,latency:{min:.385,mean:6.145,max:93.36,pstdev:11.838,percentiles:{p50:2.751,p75:4.352,p80:4.922,p90:7.436,p95:47.679,p99:54.878,p999:62.414}},resources:{envoyGateway:{memory:{min:103.29,max:103.29,mean:103.29},cpu:{min:6.800000000000001,max:6.800000000000001,mean:6.800000000000001}},envoyProxy:{memory:{min:32.29,max:32.29,mean:32.29},cpu:{min:204,max:204,mean:204}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5896.53,totalRequests:176899,latency:{min:.36,mean:6.376,max:93.995,pstdev:12.077,percentiles:{p50:2.905,p75:4.542,p80:5.112,p90:7.699,p95:48.019,p99:55.472,p999:63.707}},resources:{envoyGateway:{memory:{min:151.7,max:151.7,mean:151.7},cpu:{min:32.599999999999994,max:32.599999999999994,mean:32.599999999999994}},envoyProxy:{memory:{min:46.46,max:46.46,mean:46.46},cpu:{min:309.8,max:309.8,mean:309.8}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5885.1,totalRequests:176553,latency:{min:.37,mean:6.378,max:102.457,pstdev:12.096,percentiles:{p50:2.834,p75:4.508,p80:5.093,p90:7.817,p95:48.099,p99:55.572,p999:64.329}},resources:{envoyGateway:{memory:{min:763.38,max:763.38,mean:763.38},cpu:{min:605.6333333333333,max:605.6333333333333,mean:605.6333333333333}},envoyProxy:{memory:{min:150.81,max:150.81,mean:150.81},cpu:{min:494.66666666666674,max:494.66666666666674,mean:494.66666666666674}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5642.37,totalRequests:169274,latency:{min:.314,mean:6.43,max:135.987,pstdev:12.216,percentiles:{p50:2.801,p75:4.489,p80:5.175,p90:8.673,p95:46.69,p99:56.358,p999:73.814}},resources:{envoyGateway:{memory:{min:1603.28,max:1603.28,mean:1603.28},cpu:{min:41.63333333333333,max:41.63333333333333,mean:41.63333333333333}},envoyProxy:{memory:{min:289.75,max:289.75,mean:289.75},cpu:{min:727.1666666666666,max:727.1666666666666,mean:727.1666666666666}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5993.8,totalRequests:179822,latency:{min:.381,mean:5.965,max:84.086,pstdev:11.66,percentiles:{p50:2.666,p75:4.169,p80:4.715,p90:6.995,p95:47.218,p99:54.775,p999:61.2}},resources:{envoyGateway:{memory:{min:117.16,max:117.16,mean:117.16},cpu:{min:518.0333333333333,max:518.0333333333333,mean:518.0333333333333}},envoyProxy:{memory:{min:278.72,max:278.72,mean:278.72},cpu:{min:1205.8,max:1205.8,mean:1205.8}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5947.1,totalRequests:178412,latency:{min:.346,mean:5.809,max:76.681,pstdev:11.155,percentiles:{p50:2.707,p75:4.164,p80:4.684,p90:6.938,p95:45.451,p99:53.227,p999:59.303}},resources:{envoyGateway:{memory:{min:123.23,max:123.23,mean:123.23},cpu:{min:512.5333333333333,max:512.5333333333333,mean:512.5333333333333}},envoyProxy:{memory:{min:291.25,max:291.25,mean:291.25},cpu:{min:1103.6333333333334,max:1103.6333333333334,mean:1103.6333333333334}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4884.46,totalRequests:146534,latency:{min:.362,mean:7.148,max:137.863,pstdev:11.237,percentiles:{p50:3.375,p75:6.266,p80:7.621,p90:17.699,p95:31.992,p99:59.576,p999:83.935}},resources:{envoyGateway:{memory:{min:338.12,max:338.12,mean:338.12},cpu:{min:488.1333333333333,max:488.1333333333333,mean:488.1333333333333}},envoyProxy:{memory:{min:294.41,max:294.41,mean:294.41},cpu:{min:993,max:993,mean:993}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5737.62,totalRequests:172120,latency:{min:.345,mean:6.192,max:117.288,pstdev:11.53,percentiles:{p50:2.822,p75:4.535,p80:5.155,p90:8.463,p95:42.631,p99:55.584,p999:70.291}},resources:{envoyGateway:{memory:{min:679.73,max:679.73,mean:679.73},cpu:{min:18.76666666666667,max:18.76666666666667,mean:18.76666666666667}},envoyProxy:{memory:{min:285.93,max:285.93,mean:285.93},cpu:{min:833.4333333333334,max:833.4333333333334,mean:833.4333333333334}}},poolOverflow:363,upstreamConnections:37}]},Tee={metadata:{version:"1.1.3",runId:"1.1.3-1750190329984",date:"2024-11-04",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.3",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.3/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6070.53,totalRequests:182116,latency:{min:.353,mean:6.263,max:87.117,pstdev:11.274,percentiles:{p50:2.994,p75:4.783,p80:5.441,p90:8.506,p95:44.029,p99:54.13,p999:59.291}},resources:{envoyGateway:{memory:{min:85.16,max:85.16,mean:85.16},cpu:{min:1.3666666666666665,max:1.3666666666666665,mean:1.3666666666666665}},envoyProxy:{memory:{min:26,max:26,mean:26},cpu:{min:101.43333333333334,max:101.43333333333334,mean:101.43333333333334}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5999.45,totalRequests:179985,latency:{min:.368,mean:6.117,max:76.84,pstdev:11.675,percentiles:{p50:2.803,p75:4.339,p80:4.903,p90:7.204,p95:47.128,p99:54.317,p999:60.557}},resources:{envoyGateway:{memory:{min:102.18,max:102.18,mean:102.18},cpu:{min:7.033333333333333,max:7.033333333333333,mean:7.033333333333333}},envoyProxy:{memory:{min:34.18,max:34.18,mean:34.18},cpu:{min:203.56666666666666,max:203.56666666666666,mean:203.56666666666666}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6053.06,totalRequests:181592,latency:{min:.39,mean:5.889,max:94.826,pstdev:11.642,percentiles:{p50:2.599,p75:4.075,p80:4.583,p90:6.945,p95:47.128,p99:54.872,p999:62.212}},resources:{envoyGateway:{memory:{min:151.34,max:151.34,mean:151.34},cpu:{min:31.633333333333336,max:31.633333333333336,mean:31.633333333333336}},envoyProxy:{memory:{min:48.34,max:48.34,mean:48.34},cpu:{min:309.06666666666666,max:309.06666666666666,mean:309.06666666666666}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5895.77,totalRequests:176873,latency:{min:.378,mean:6.22,max:100.757,pstdev:12.033,percentiles:{p50:2.723,p75:4.341,p80:4.931,p90:7.644,p95:47.828,p99:55.521,p999:67.383}},resources:{envoyGateway:{memory:{min:687.16,max:687.16,mean:687.16},cpu:{min:578.2333333333332,max:578.2333333333332,mean:578.2333333333332}},envoyProxy:{memory:{min:150.69,max:150.69,mean:150.69},cpu:{min:488.20000000000005,max:488.20000000000005,mean:488.20000000000005}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5818.09,totalRequests:174543,latency:{min:.356,mean:6.109,max:107.913,pstdev:11.285,percentiles:{p50:2.832,p75:4.538,p80:5.163,p90:8.134,p95:42.639,p99:54.546,p999:67.543}},resources:{envoyGateway:{memory:{min:1329.35,max:1329.35,mean:1329.35},cpu:{min:61.33333333333333,max:61.33333333333333,mean:61.33333333333333}},envoyProxy:{memory:{min:303.55,max:303.55,mean:303.55},cpu:{min:731.4333333333334,max:731.4333333333334,mean:731.4333333333334}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5996.79,totalRequests:179907,latency:{min:.367,mean:6.127,max:77.688,pstdev:11.777,percentiles:{p50:2.745,p75:4.292,p80:4.835,p90:7.317,p95:47.597,p99:54.706,p999:61.323}},resources:{envoyGateway:{memory:{min:125.62,max:125.62,mean:125.62},cpu:{min:525.5,max:525.5,mean:525.5}},envoyProxy:{memory:{min:289.68,max:289.68,mean:289.68},cpu:{min:1239.6,max:1239.6,mean:1239.6}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5732.14,totalRequests:171956,latency:{min:.336,mean:4.876,max:76.279,pstdev:10.072,percentiles:{p50:2.29,p75:3.444,p80:3.846,p90:5.476,p95:24.546,p99:51.763,p999:57.04}},resources:{envoyGateway:{memory:{min:132.64,max:132.64,mean:132.64},cpu:{min:520.8333333333333,max:520.8333333333333,mean:520.8333333333333}},envoyProxy:{memory:{min:291.68,max:291.68,mean:291.68},cpu:{min:1138.0333333333335,max:1138.0333333333335,mean:1138.0333333333335}}},poolOverflow:371,upstreamConnections:29},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:5311.34,totalRequests:159332,latency:{min:.362,mean:6.219,max:144.302,pstdev:11.133,percentiles:{p50:2.808,p75:4.741,p80:5.579,p90:10.689,p95:37.48,p99:53.626,p999:73.998}},resources:{envoyGateway:{memory:{min:179.01,max:179.01,mean:179.01},cpu:{min:497.9666666666666,max:497.9666666666666,mean:497.9666666666666}},envoyProxy:{memory:{min:298.77,max:298.77,mean:298.77},cpu:{min:1034.033333333333,max:1034.033333333333,mean:1034.033333333333}}},poolOverflow:365,upstreamConnections:35},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5633.85,totalRequests:169021,latency:{min:.369,mean:6.266,max:106.577,pstdev:11.127,percentiles:{p50:2.908,p75:4.793,p80:5.511,p90:9.568,p95:36.169,p99:54.472,p999:68.628}},resources:{envoyGateway:{memory:{min:487.12,max:487.12,mean:487.12},cpu:{min:27.133333333333336,max:27.133333333333336,mean:27.133333333333336}},envoyProxy:{memory:{min:299.84,max:299.84,mean:299.84},cpu:{min:837.8666666666668,max:837.8666666666668,mean:837.8666666666668}}},poolOverflow:363,upstreamConnections:37}]},Nee={metadata:{version:"1.1.2",runId:"1.1.2-1750190329982",date:"2024-09-24",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.2",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.2/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:5649.72,totalRequests:169493,latency:{min:.356,mean:6.56,max:72.347,pstdev:11.796,percentiles:{p50:3.044,p75:5.011,p80:5.69,p90:8.937,p95:46.88,p99:54.56,p999:59.316}},resources:{envoyGateway:{memory:{min:86.72,max:86.72,mean:86.72},cpu:{min:1.5666666666666667,max:1.5666666666666667,mean:1.5666666666666667}},envoyProxy:{memory:{min:24.26,max:24.26,mean:24.26},cpu:{min:101.63333333333333,max:101.63333333333333,mean:101.63333333333333}}},poolOverflow:360,upstreamConnections:40},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:5594.14,totalRequests:167826,latency:{min:.377,mean:6.225,max:71.024,pstdev:11.98,percentiles:{p50:2.812,p75:4.378,p80:4.905,p90:7.214,p95:48.16,p99:54.513,p999:59.85}},resources:{envoyGateway:{memory:{min:106.76,max:106.76,mean:106.76},cpu:{min:7.7,max:7.7,mean:7.7}},envoyProxy:{memory:{min:32.43,max:32.43,mean:32.43},cpu:{min:204.53333333333333,max:204.53333333333333,mean:204.53333333333333}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:5523.65,totalRequests:165711,latency:{min:.379,mean:6.455,max:77.815,pstdev:12.317,percentiles:{p50:2.868,p75:4.51,p80:5.086,p90:7.645,p95:49.127,p99:55.048,p999:61.448}},resources:{envoyGateway:{memory:{min:149.03,max:149.03,mean:149.03},cpu:{min:29.333333333333332,max:29.333333333333332,mean:29.333333333333332}},envoyProxy:{memory:{min:46.61,max:46.61,mean:46.61},cpu:{min:309.7666666666667,max:309.7666666666667,mean:309.7666666666667}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5554.01,totalRequests:166624,latency:{min:.357,mean:6.246,max:99.753,pstdev:12.051,percentiles:{p50:2.841,p75:4.416,p80:4.96,p90:7.177,p95:48.371,p99:54.8,p999:63.275}},resources:{envoyGateway:{memory:{min:375.51,max:375.51,mean:375.51},cpu:{min:615.1,max:615.1,mean:615.1}},envoyProxy:{memory:{min:152.97,max:152.97,mean:152.97},cpu:{min:492.4666666666667,max:492.4666666666667,mean:492.4666666666667}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5475.04,totalRequests:164256,latency:{min:.365,mean:6.546,max:95.539,pstdev:12.646,percentiles:{p50:2.834,p75:4.484,p80:5.075,p90:7.891,p95:49.397,p99:56.231,p999:67.629}},resources:{envoyGateway:{memory:{min:1340.6,max:1340.6,mean:1340.6},cpu:{min:38.333333333333336,max:38.333333333333336,mean:38.333333333333336}},envoyProxy:{memory:{min:281.71,max:281.71,mean:281.71},cpu:{min:718.0666666666666,max:718.0666666666666,mean:718.0666666666666}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5657.68,totalRequests:169734,latency:{min:.355,mean:7.32,max:87.252,pstdev:13.162,percentiles:{p50:3.307,p75:5.218,p80:5.885,p90:9.252,p95:50.671,p99:56.332,p999:62.406}},resources:{envoyGateway:{memory:{min:371.29,max:371.29,mean:371.29},cpu:{min:578.7666666666667,max:578.7666666666667,mean:578.7666666666667}},envoyProxy:{memory:{min:273.57,max:273.57,mean:273.57},cpu:{min:1224,max:1224,mean:1224}}},poolOverflow:356,upstreamConnections:44},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5587.8,totalRequests:167636,latency:{min:.356,mean:6.346,max:68.095,pstdev:12.097,percentiles:{p50:2.89,p75:4.509,p80:5.041,p90:7.495,p95:48.56,p99:54.345,p999:60.436}},resources:{envoyGateway:{memory:{min:342.8,max:342.8,mean:342.8},cpu:{min:573.3000000000001,max:573.3000000000001,mean:573.3000000000001}},envoyProxy:{memory:{min:274.84,max:274.84,mean:274.84},cpu:{min:1122.2333333333333,max:1122.2333333333333,mean:1122.2333333333333}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4098.74,totalRequests:122966,latency:{min:.347,mean:3.66,max:99.745,pstdev:7.371,percentiles:{p50:1.658,p75:2.735,p80:3.147,p90:5.306,p95:18.03,p99:42.778,p999:60.44}},resources:{envoyGateway:{memory:{min:433.01,max:433.01,mean:433.01},cpu:{min:486.96666666666664,max:486.96666666666664,mean:486.96666666666664}},envoyProxy:{memory:{min:281.27,max:281.27,mean:281.27},cpu:{min:996.0333333333333,max:996.0333333333333,mean:996.0333333333333}}},poolOverflow:384,upstreamConnections:16},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5306.46,totalRequests:159194,latency:{min:.36,mean:6.884,max:106.807,pstdev:12.85,percentiles:{p50:2.983,p75:4.873,p80:5.573,p90:9.215,p95:49.102,p99:58.521,p999:70.213}},resources:{envoyGateway:{memory:{min:232.76,max:232.76,mean:232.76},cpu:{min:16.299999999999997,max:16.299999999999997,mean:16.299999999999997}},envoyProxy:{memory:{min:282.68,max:282.68,mean:282.68},cpu:{min:825.4333333333333,max:825.4333333333333,mean:825.4333333333333}}},poolOverflow:361,upstreamConnections:39}]},qee={metadata:{version:"1.1.1",runId:"1.1.1-1750190329981",date:"2024-09-12",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.1",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.1/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6258.99,totalRequests:187774,latency:{min:.333,mean:5.933,max:71.266,pstdev:10.816,percentiles:{p50:2.898,p75:4.513,p80:5.099,p90:7.661,p95:40.607,p99:53.149,p999:58.789}},resources:{envoyGateway:{memory:{min:84.04,max:84.04,mean:84.04},cpu:{min:1.5333333333333334,max:1.5333333333333334,mean:1.5333333333333334}},envoyProxy:{memory:{min:25.57,max:25.57,mean:25.57},cpu:{min:101.33333333333331,max:101.33333333333331,mean:101.33333333333331}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6118.28,totalRequests:183552,latency:{min:.359,mean:5.828,max:81.178,pstdev:11.437,percentiles:{p50:2.646,p75:4.049,p80:4.561,p90:6.666,p95:46.723,p99:53.913,p999:60.094}},resources:{envoyGateway:{memory:{min:101.33,max:101.33,mean:101.33},cpu:{min:6.8999999999999995,max:6.8999999999999995,mean:6.8999999999999995}},envoyProxy:{memory:{min:33.75,max:33.75,mean:33.75},cpu:{min:203.6,max:203.6,mean:203.6}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6045.36,totalRequests:181361,latency:{min:.377,mean:5.908,max:88.063,pstdev:11.539,percentiles:{p50:2.659,p75:4.143,p80:4.675,p90:6.863,p95:46.733,p99:54.091,p999:63.211}},resources:{envoyGateway:{memory:{min:115.34,max:115.34,mean:115.34},cpu:{min:32.800000000000004,max:32.800000000000004,mean:32.800000000000004}},envoyProxy:{memory:{min:47.79,max:47.79,mean:47.79},cpu:{min:308.96666666666664,max:308.96666666666664,mean:308.96666666666664}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5881.18,totalRequests:176436,latency:{min:.327,mean:6.376,max:130.33,pstdev:12.048,percentiles:{p50:2.843,p75:4.548,p80:5.181,p90:8.168,p95:47.517,p99:55.47,p999:66.041}},resources:{envoyGateway:{memory:{min:608.65,max:608.65,mean:608.65},cpu:{min:625.6666666666666,max:625.6666666666666,mean:625.6666666666666}},envoyProxy:{memory:{min:152.29,max:152.29,mean:152.29},cpu:{min:492.5666666666667,max:492.5666666666667,mean:492.5666666666667}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5875.93,totalRequests:176280,latency:{min:.381,mean:6.086,max:86.654,pstdev:11.932,percentiles:{p50:2.704,p75:4.181,p80:4.727,p90:7.177,p95:47.091,p99:55.814,p999:68.415}},resources:{envoyGateway:{memory:{min:1308.52,max:1308.52,mean:1308.52},cpu:{min:39.49999999999999,max:39.49999999999999,mean:39.49999999999999}},envoyProxy:{memory:{min:283.24,max:283.24,mean:283.24},cpu:{min:707.1333333333332,max:707.1333333333332,mean:707.1333333333332}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:6077.56,totalRequests:182327,latency:{min:.362,mean:6.197,max:92.372,pstdev:11.72,percentiles:{p50:2.824,p75:4.438,p80:5,p90:7.503,p95:47.11,p99:54.169,p999:60.426}},resources:{envoyGateway:{memory:{min:121.13,max:121.13,mean:121.13},cpu:{min:544.5333333333334,max:544.5333333333334,mean:544.5333333333334}},envoyProxy:{memory:{min:277.29,max:277.29,mean:277.29},cpu:{min:1206.4666666666665,max:1206.4666666666665,mean:1206.4666666666665}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:6047.67,totalRequests:181438,latency:{min:.37,mean:6.062,max:92.168,pstdev:11.743,percentiles:{p50:2.733,p75:4.268,p80:4.801,p90:7.226,p95:47.095,p99:54.886,p999:61.917}},resources:{envoyGateway:{memory:{min:126.22,max:126.22,mean:126.22},cpu:{min:538.8333333333334,max:538.8333333333334,mean:538.8333333333334}},envoyProxy:{memory:{min:285.62,max:285.62,mean:285.62},cpu:{min:1104.3000000000002,max:1104.3000000000002,mean:1104.3000000000002}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4654.8,totalRequests:139655,latency:{min:.336,mean:4.675,max:107.409,pstdev:9.843,percentiles:{p50:2.048,p75:3.459,p80:4.015,p90:6.531,p95:19.138,p99:57.518,p999:73.269}},resources:{envoyGateway:{memory:{min:480.36,max:480.36,mean:480.36},cpu:{min:377,max:377,mean:377}},envoyProxy:{memory:{min:289.51,max:289.51,mean:289.51},cpu:{min:969.2333333333332,max:969.2333333333332,mean:969.2333333333332}}},poolOverflow:377,upstreamConnections:23},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5676.68,totalRequests:170301,latency:{min:.376,mean:6.244,max:153.264,pstdev:11.618,percentiles:{p50:2.797,p75:4.618,p80:5.324,p90:8.807,p95:40.232,p99:56.496,p999:73.506}},resources:{envoyGateway:{memory:{min:436.58,max:436.58,mean:436.58},cpu:{min:28.066666666666666,max:28.066666666666666,mean:28.066666666666666}},envoyProxy:{memory:{min:283.47,max:283.47,mean:283.47},cpu:{min:813.3666666666667,max:813.3666666666667,mean:813.3666666666667}}},poolOverflow:363,upstreamConnections:37}]},jee={metadata:{version:"1.1.0",runId:"1.1.0-1750190329977",date:"2024-07-23",environment:"GitHub CI",description:"Benchmark report for Envoy Gateway 1.1.0",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.1.0/benchmark_report.zip",testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"}},results:[{testName:"scale-up-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-up",throughput:6181.97,totalRequests:185463,latency:{min:.362,mean:5.902,max:73.084,pstdev:11.039,percentiles:{p50:2.765,p75:4.364,p80:4.935,p90:7.504,p95:41.244,p99:53.929,p999:61.147}},resources:{envoyGateway:{memory:{min:86.2,max:86.2,mean:86.2},cpu:{min:1.4333333333333333,max:1.4333333333333333,mean:1.4333333333333333}},envoyProxy:{memory:{min:24.09,max:24.09,mean:24.09},cpu:{min:101.36666666666667,max:101.36666666666667,mean:101.36666666666667}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-up",throughput:6103.97,totalRequests:183121,latency:{min:.354,mean:5.852,max:75.943,pstdev:11.382,percentiles:{p50:2.681,p75:4.083,p80:4.601,p90:6.825,p95:46.262,p99:53.862,p999:60.651}},resources:{envoyGateway:{memory:{min:100.14,max:100.14,mean:100.14},cpu:{min:7.233333333333333,max:7.233333333333333,mean:7.233333333333333}},envoyProxy:{memory:{min:32.25,max:32.25,mean:32.25},cpu:{min:203.6,max:203.6,mean:203.6}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-up",throughput:6074.87,totalRequests:182247,latency:{min:.371,mean:5.877,max:94.171,pstdev:11.399,percentiles:{p50:2.732,p75:4.191,p80:4.677,p90:6.801,p95:46.481,p99:53.866,p999:61.036}},resources:{envoyGateway:{memory:{min:114.69,max:114.69,mean:114.69},cpu:{min:30,max:30,mean:30}},envoyProxy:{memory:{min:46.42,max:46.42,mean:46.42},cpu:{min:308.70000000000005,max:308.70000000000005,mean:308.70000000000005}}},poolOverflow:363,upstreamConnections:37},{testName:"scale-up-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-up",throughput:5993.57,totalRequests:179811,latency:{min:.368,mean:6.123,max:96.571,pstdev:11.831,percentiles:{p50:2.753,p75:4.261,p80:4.799,p90:7.247,p95:47.368,p99:55.248,p999:66.586}},resources:{envoyGateway:{memory:{min:762.8,max:762.8,mean:762.8},cpu:{min:600.8666666666667,max:600.8666666666667,mean:600.8666666666667}},envoyProxy:{memory:{min:152.78,max:152.78,mean:152.78},cpu:{min:488.70000000000005,max:488.70000000000005,mean:488.70000000000005}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-up-httproutes-500",routes:500,routesPerHostname:1,phase:"scaling-up",throughput:5812.8,totalRequests:174396,latency:{min:.388,mean:6.31,max:95.719,pstdev:12.246,percentiles:{p50:2.729,p75:4.334,p80:4.905,p90:7.607,p95:47.97,p99:56.811,p999:68.165}},resources:{envoyGateway:{memory:{min:1593.56,max:1593.56,mean:1593.56},cpu:{min:36.56666666666667,max:36.56666666666667,mean:36.56666666666667}},envoyProxy:{memory:{min:289.79,max:289.79,mean:289.79},cpu:{min:715.6333333333333,max:715.6333333333333,mean:715.6333333333333}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-10",routes:10,routesPerHostname:1,phase:"scaling-down",throughput:5916.93,totalRequests:177517,latency:{min:.385,mean:6.352,max:82.747,pstdev:12.011,percentiles:{p50:2.822,p75:4.461,p80:5.061,p90:7.769,p95:47.847,p99:55.068,p999:62.578}},resources:{envoyGateway:{memory:{min:124.07,max:124.07,mean:124.07},cpu:{min:519.6333333333332,max:519.6333333333332,mean:519.6333333333332}},envoyProxy:{memory:{min:284.03,max:284.03,mean:284.03},cpu:{min:1194.8666666666666,max:1194.8666666666666,mean:1194.8666666666666}}},poolOverflow:361,upstreamConnections:39},{testName:"scale-down-httproutes-50",routes:50,routesPerHostname:1,phase:"scaling-down",throughput:5876.35,totalRequests:176294,latency:{min:.371,mean:6.226,max:83.869,pstdev:11.816,percentiles:{p50:2.77,p75:4.396,p80:5,p90:7.848,p95:47.163,p99:55.156,p999:64.434}},resources:{envoyGateway:{memory:{min:131.62,max:131.62,mean:131.62},cpu:{min:513.6,max:513.6,mean:513.6}},envoyProxy:{memory:{min:291.73,max:291.73,mean:291.73},cpu:{min:1092.9333333333334,max:1092.9333333333334,mean:1092.9333333333334}}},poolOverflow:362,upstreamConnections:38},{testName:"scale-down-httproutes-100",routes:100,routesPerHostname:1,phase:"scaling-down",throughput:4820.43,totalRequests:144617,latency:{min:.342,mean:7.088,max:172.031,pstdev:12.642,percentiles:{p50:3.156,p75:5.48,p80:6.443,p90:12.007,p95:39.675,p99:63.842,p999:86.532}},resources:{envoyGateway:{memory:{min:374.36,max:374.36,mean:374.36},cpu:{min:462.8,max:462.8,mean:462.8}},envoyProxy:{memory:{min:289.98,max:289.98,mean:289.98},cpu:{min:980.4,max:980.4,mean:980.4}}},poolOverflow:364,upstreamConnections:36},{testName:"scale-down-httproutes-300",routes:300,routesPerHostname:1,phase:"scaling-down",throughput:5746.71,totalRequests:172402,latency:{min:.386,mean:6.313,max:101.535,pstdev:11.578,percentiles:{p50:2.875,p75:4.579,p80:5.222,p90:8.617,p95:44.341,p99:54.996,p999:67.178}},resources:{envoyGateway:{memory:{min:670.44,max:670.44,mean:670.44},cpu:{min:24.333333333333332,max:24.333333333333332,mean:24.333333333333332}},envoyProxy:{memory:{min:285.86,max:285.86,mean:285.86},cpu:{min:824.5666666666667,max:824.5666666666667,mean:824.5666666666667}}},poolOverflow:362,upstreamConnections:38}]},Mee={metadata:{version:"1.6.6",runId:"1.6.6-release-2026-04-16",date:"2026-04-16T14:08:03Z",environment:"GitHub Release",description:"Benchmark results for version 1.6.6 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.6.6/benchmark_report.zip",testConfiguration:{connections:100,cpuLimit:"1000m",duration:90,memoryLimit:"2000Mi",rps:100}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:404.438202247191,totalRequests:35995,latency:{max:33.880063,min:.387376,mean:.507736,pstdev:.411868,percentiles:{p50:.470607,p75:.49054299999999995,p80:.49811099999999997,p90:.5253429999999999,p95:.569183,p99:1.250367,p999:5.262591}},resources:{envoyGateway:{memory:{max:134.1796875,min:116.68359375,mean:132.01341145833334},cpu:{max:1.266666666666667,min:.33333333333333287,mean:.5738095238095238}},envoyProxy:{memory:{max:28.56640625,min:7.24609375,mean:26.650390625},cpu:{max:10.481698907670713,min:10.198609044927105,mean:10.315512665874808}}},poolOverflow:5,upstreamConnections:9,counters:{"benchmark.http_2xx":{value:35995,perSecond:404.438202247191},"benchmark.pool_overflow":{value:5,perSecond:.056179775280898875},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:9,perSecond:.10112359550561797},upstream_cx_rx_bytes_total:{value:5651215,perSecond:63496.79775280899},upstream_cx_total:{value:9,perSecond:.10112359550561797},upstream_cx_tx_bytes_total:{value:1619775,perSecond:18199.719101123595},upstream_rq_pending_overflow:{value:5,perSecond:.056179775280898875},upstream_rq_pending_total:{value:9,perSecond:.10112359550561797},upstream_rq_total:{value:35995,perSecond:404.438202247191}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1199.2333333333333,totalRequests:107931,latency:{max:90.86975899999999,min:.35481599999999996,mean:.50866,pstdev:.876099,percentiles:{p50:.457231,p75:.476111,p80:.481439,p90:.506111,p95:.5612790000000001,p99:1.435519,p999:7.173119}},resources:{envoyGateway:{memory:{max:146.0625,min:134.296875,mean:142.66171875},cpu:{max:2.066666666666667,min:.46666666666666556,mean:.8133333333333337}},envoyProxy:{memory:{max:32.96875,min:28.46484375,mean:32.34921875},cpu:{max:30.693209207037853,min:22.027248979189356,mean:29.453267114194706}}},poolOverflow:69,upstreamConnections:34,counters:{"benchmark.http_2xx":{value:107931,perSecond:1199.2333333333333},"benchmark.pool_overflow":{value:69,perSecond:.7666666666666667},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:34,perSecond:.37777777777777777},upstream_cx_rx_bytes_total:{value:16945167,perSecond:188279.63333333333},upstream_cx_total:{value:34,perSecond:.37777777777777777},upstream_cx_tx_bytes_total:{value:4856895,perSecond:53965.5},upstream_rq_pending_overflow:{value:69,perSecond:.7666666666666667},upstream_rq_pending_total:{value:34,perSecond:.37777777777777777},upstream_rq_total:{value:107931,perSecond:1199.2333333333333}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:2021.1348314606741,totalRequests:179881,latency:{max:56.614911,min:.353712,mean:.516452,pstdev:.659549,percentiles:{p50:.460671,p75:.476447,p80:.482431,p90:.514799,p95:.611711,p99:1.713855,p999:8.161279}},resources:{envoyGateway:{memory:{max:148.16015625,min:137.08203125,mean:144.21393229166668},cpu:{max:2.8666666666666676,min:.4666666666666685,mean:1.0355555555555556}},envoyProxy:{memory:{max:41.40234375,min:34.8359375,mean:38.9046875},cpu:{max:49.46994247110364,min:49.11130632911394,mean:49.326488014307756}}},poolOverflow:119,upstreamConnections:49,counters:{"benchmark.http_2xx":{value:179881,perSecond:2021.1348314606741},"benchmark.pool_overflow":{value:119,perSecond:1.3370786516853932},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:49,perSecond:.550561797752809},upstream_cx_rx_bytes_total:{value:28241317,perSecond:317318.1685393258},upstream_cx_total:{value:49,perSecond:.550561797752809},upstream_cx_tx_bytes_total:{value:8094645,perSecond:90951.06741573034},upstream_rq_pending_overflow:{value:119,perSecond:1.3370786516853932},upstream_rq_pending_total:{value:49,perSecond:.550561797752809},upstream_rq_total:{value:179881,perSecond:2021.1348314606741}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3234.921348314607,totalRequests:287908,latency:{max:214.679551,min:.33377599999999996,mean:1.347763,pstdev:5.953906,percentiles:{p50:.5782069999999999,p75:.736575,p80:.784127,p90:.959999,p95:1.368447,p99:32.039935,p999:80.101375}},resources:{envoyGateway:{memory:{max:157.796875,min:142.00390625,mean:153.67513020833334},cpu:{max:4.933333333333323,min:.7999999999999948,mean:1.5888888888888897}},envoyProxy:{memory:{max:73.23828125,min:60.9609375,mean:69.82369791666666},cpu:{max:78.84926882768706,min:39.2908866931036,mean:62.03672197900912}}},poolOverflow:91,upstreamConnections:270,counters:{"benchmark.http_2xx":{value:287908,perSecond:3234.921348314607},"benchmark.pool_overflow":{value:91,perSecond:1.0224719101123596},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:270,perSecond:3.033707865168539},upstream_cx_rx_bytes_total:{value:45201556,perSecond:507882.65168539324},upstream_cx_total:{value:270,perSecond:3.033707865168539},upstream_cx_tx_bytes_total:{value:12955860,perSecond:145571.4606741573},upstream_rq_pending_overflow:{value:91,perSecond:1.0224719101123596},upstream_rq_pending_total:{value:270,perSecond:3.033707865168539},upstream_rq_total:{value:287908,perSecond:3234.921348314607}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3998.777777777778,totalRequests:359890,latency:{max:245.112831,min:.33624000000000004,mean:4.780056,pstdev:17.543810999999998,percentiles:{p50:.589215,p75:.869631,p80:1.021663,p90:3.309439,p95:25.322495,p99:94.932991,p999:175.874047}},resources:{envoyGateway:{memory:{max:161.43359375,min:156.67578125,mean:159.50208333333333},cpu:{max:8.266666666666655,min:.86666666666666,mean:2.1822222222222245}},envoyProxy:{memory:{max:100.265625,min:91.65234375,mean:97.87916666666666},cpu:{max:98.35603575528931,min:59.25775073715499,mean:84.76149181860085}}},poolOverflow:108,upstreamConnections:292,counters:{"benchmark.http_2xx":{value:359890,perSecond:3998.777777777778},"benchmark.pool_overflow":{value:108,perSecond:1.2},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:292,perSecond:3.2444444444444445},upstream_cx_rx_bytes_total:{value:56502730,perSecond:627808.1111111111},upstream_cx_total:{value:292,perSecond:3.2444444444444445},upstream_cx_tx_bytes_total:{value:16195140,perSecond:179946},upstream_rq_pending_overflow:{value:108,perSecond:1.2},upstream_rq_pending_total:{value:292,perSecond:3.2444444444444445},upstream_rq_total:{value:359892,perSecond:3998.8}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:4689.977777777778,totalRequests:422098,latency:{max:248.496127,min:.398128,mean:59.083398,pstdev:39.084657,percentiles:{p50:70.328319,p75:87.94931100000001,p80:92.20505499999999,p90:101.740543,p95:110.870527,p99:168.321023,p999:202.465279}},resources:{envoyGateway:{memory:{max:187.17578125,min:174.92578125,mean:183.34283854166668},cpu:{max:14.933333333333392,min:.8666666666667312,mean:3.491111111111108}},envoyProxy:{memory:{max:163.9296875,min:150.73046875,mean:158.60247395833332},cpu:{max:69.85045922786442,min:69.85045922786442,mean:69.85045922786442}}},poolOverflow:113,upstreamConnections:287,counters:{"benchmark.http_2xx":{value:422098,perSecond:4689.977777777778},"benchmark.pool_overflow":{value:113,perSecond:1.2555555555555555},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:287,perSecond:3.188888888888889},upstream_cx_rx_bytes_total:{value:66269386,perSecond:736326.5111111111},upstream_cx_total:{value:287,perSecond:3.188888888888889},upstream_cx_tx_bytes_total:{value:18998505,perSecond:211094.5},upstream_rq_pending_overflow:{value:113,perSecond:1.2555555555555555},upstream_rq_pending_total:{value:287,perSecond:3.188888888888889},upstream_rq_total:{value:422189,perSecond:4690.988888888889}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3999.288888888889,totalRequests:359936,latency:{max:458.833919,min:.331216,mean:4.969953,pstdev:19.039579,percentiles:{p50:.596607,p75:.886719,p80:1.034399,p90:2.897279,p95:24.657919,p99:101.179391,p999:187.269119}},resources:{envoyGateway:{memory:{max:174.984375,min:162.4921875,mean:167.33841145833333},cpu:{max:1.2659914712153366,min:1.13333333333325,mean:1.1709512339401278}},envoyProxy:{memory:{max:156.515625,min:154.5625,mean:155.71731770833333},cpu:{max:97.94922054530775,min:94.7142316561226,mean:95.79061787275042}}},poolOverflow:61,upstreamConnections:339,counters:{"benchmark.http_2xx":{value:359936,perSecond:3999.288888888889},"benchmark.pool_overflow":{value:61,perSecond:.6777777777777778},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:339,perSecond:3.7666666666666666},upstream_cx_rx_bytes_total:{value:56509952,perSecond:627888.3555555556},upstream_cx_total:{value:339,perSecond:3.7666666666666666},upstream_cx_tx_bytes_total:{value:16197255,perSecond:179969.5},upstream_rq_pending_overflow:{value:61,perSecond:.6777777777777778},upstream_rq_pending_total:{value:339,perSecond:3.7666666666666666},upstream_rq_total:{value:359939,perSecond:3999.322222222222}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3198.5777777777776,totalRequests:287872,latency:{max:92.098559,min:.3348,mean:1.216339,pstdev:5.12706,percentiles:{p50:.5432629999999999,p75:.6351669999999999,p80:.684223,p90:.906527,p95:1.413311,p99:28.030975,p999:69.734399}},resources:{envoyGateway:{memory:{max:166.23828125,min:160.7265625,mean:162.56966145833334},cpu:{max:1.2000000000000455,min:1.066666666666644,mean:1.1166666666666698}},envoyProxy:{memory:{max:154.7578125,min:150.59765625,mean:152.107421875},cpu:{max:80.57323272090986,min:80.57323272090986,mean:80.57323272090986}}},poolOverflow:128,upstreamConnections:235,counters:{"benchmark.http_2xx":{value:287872,perSecond:3198.5777777777776},"benchmark.pool_overflow":{value:128,perSecond:1.4222222222222223},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:235,perSecond:2.611111111111111},upstream_cx_rx_bytes_total:{value:45195904,perSecond:502176.7111111111},upstream_cx_total:{value:235,perSecond:2.611111111111111},upstream_cx_tx_bytes_total:{value:12954240,perSecond:143936},upstream_rq_pending_overflow:{value:128,perSecond:1.4222222222222223},upstream_rq_pending_total:{value:235,perSecond:2.611111111111111},upstream_rq_total:{value:287872,perSecond:3198.5777777777776}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:2019.629213483146,totalRequests:179747,latency:{max:96.550911,min:.349776,mean:.577981,pstdev:1.2729519999999999,percentiles:{p50:.474671,p75:.518367,p80:.539359,p90:.611071,p95:.763871,p99:2.109695,p999:12.799999}},resources:{envoyGateway:{memory:{max:157.94140625,min:148.09765625,mean:150.53111979166667},cpu:{max:1.2000000000000457,min:1.066666666666644,mean:1.1391304347826228}},envoyProxy:{memory:{max:151.9296875,min:150.359375,mean:151.08776041666667},cpu:{max:51.70564292946298,min:50.91727267696056,mean:51.180062761128035}}},poolOverflow:253,upstreamConnections:62,counters:{"benchmark.http_2xx":{value:179747,perSecond:2019.629213483146},"benchmark.pool_overflow":{value:253,perSecond:2.842696629213483},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:62,perSecond:.6966292134831461},upstream_cx_rx_bytes_total:{value:28220279,perSecond:317081.78651685396},upstream_cx_total:{value:62,perSecond:.6966292134831461},upstream_cx_tx_bytes_total:{value:8088615,perSecond:90883.31460674158},upstream_rq_pending_overflow:{value:253,perSecond:2.842696629213483},upstream_rq_pending_total:{value:62,perSecond:.6966292134831461},upstream_rq_total:{value:179747,perSecond:2019.629213483146}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1199.4888888888888,totalRequests:107954,latency:{max:52.932607,min:.366016,mean:.513018,pstdev:.546949,percentiles:{p50:.46732700000000005,p75:.48377499999999996,p80:.48961499999999997,p90:.515983,p95:.569087,p99:1.446079,p999:8.301055}},resources:{envoyGateway:{memory:{max:152.47265625,min:142.44921875,mean:148.01822916666666},cpu:{max:1.2666666666666515,min:1.066666666666644,mean:1.1666666666666716}},envoyProxy:{memory:{max:151.0078125,min:149.953125,mean:150.43489583333334},cpu:{max:31.921542598843654,min:18.91236776541521,mean:25.88042318797759}}},poolOverflow:46,upstreamConnections:32,counters:{"benchmark.http_2xx":{value:107954,perSecond:1199.4888888888888},"benchmark.pool_overflow":{value:46,perSecond:.5111111111111111},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:32,perSecond:.35555555555555557},upstream_cx_rx_bytes_total:{value:16948778,perSecond:188319.75555555554},upstream_cx_total:{value:32,perSecond:.35555555555555557},upstream_cx_tx_bytes_total:{value:4857930,perSecond:53977},upstream_rq_pending_overflow:{value:46,perSecond:.5111111111111111},upstream_rq_pending_total:{value:32,perSecond:.35555555555555557},upstream_rq_total:{value:107954,perSecond:1199.4888888888888}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:404.1123595505618,totalRequests:35966,latency:{max:111.333375,min:.38016,mean:.545542,pstdev:1.075619,percentiles:{p50:.485487,p75:.527999,p80:.539679,p90:.573791,p95:.621375,p99:1.381631,p999:7.817727}},resources:{envoyGateway:{memory:{max:145.6328125,min:143.19921875,mean:144.47630208333334},cpu:{max:1.2666666666666517,min:1.066666666666644,mean:1.1128344152949756}},envoyProxy:{memory:{max:150.8671875,min:150.2421875,mean:150.51067708333332},cpu:{max:12.051869716020317,min:10.812681257807123,mean:11.105701068624029}}},poolOverflow:34,upstreamConnections:14,counters:{"benchmark.http_2xx":{value:35966,perSecond:404.1123595505618},"benchmark.pool_overflow":{value:34,perSecond:.38202247191011235},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:14,perSecond:.15730337078651685},upstream_cx_rx_bytes_total:{value:5646662,perSecond:63445.6404494382},upstream_cx_total:{value:14,perSecond:.15730337078651685},upstream_cx_tx_bytes_total:{value:1618470,perSecond:18185.05617977528},upstream_rq_pending_overflow:{value:34,perSecond:.38202247191011235},upstream_rq_pending_total:{value:14,perSecond:.15730337078651685},upstream_rq_total:{value:35966,perSecond:404.1123595505618}}}]},Iee={metadata:{version:"1.7.2",runId:"1.7.2-release-2026-04-17",date:"2026-04-17T01:33:18Z",environment:"GitHub Release",description:"Benchmark results for version 1.7.2 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.7.2/benchmark_report.zip",testConfiguration:{connections:100,cpuLimit:"1000m",duration:90,memoryLimit:"2000Mi",rps:100}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:404.35955056179773,totalRequests:35988,latency:{max:101.68729499999999,min:.355904,mean:.49871699999999997,pstdev:.9805560000000001,percentiles:{p50:.457103,p75:.47526300000000005,p80:.48102300000000003,p90:.501631,p95:.535551,p99:1.060351,p999:6.245631}},resources:{envoyGateway:{memory:{max:134.72265625,min:116.70703125,mean:131.82174479166667},cpu:{max:1.1999999999999995,min:.33333333333333287,mean:.5690476190476189}},envoyProxy:{memory:{max:25.734375,min:6.9375,mean:22.484895833333333},cpu:{max:10.60714949795463,min:6.173356863557859,mean:8.817763315828271}}},poolOverflow:12,upstreamConnections:11,counters:{"benchmark.http_2xx":{value:35988,perSecond:404.35955056179773},"benchmark.pool_overflow":{value:12,perSecond:.1348314606741573},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:11,perSecond:.12359550561797752},upstream_cx_rx_bytes_total:{value:5650116,perSecond:63484.449438202246},upstream_cx_total:{value:11,perSecond:.12359550561797752},upstream_cx_tx_bytes_total:{value:1619460,perSecond:18196.1797752809},upstream_rq_pending_overflow:{value:12,perSecond:.1348314606741573},upstream_rq_pending_total:{value:11,perSecond:.12359550561797752},upstream_rq_total:{value:35988,perSecond:404.35955056179773}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1213.2022471910113,totalRequests:107975,latency:{max:52.019199,min:.346128,mean:.48446300000000003,pstdev:.478466,percentiles:{p50:.447967,p75:.463743,p80:.468719,p90:.49182299999999995,p95:.539551,p99:1.309695,p999:5.046527}},resources:{envoyGateway:{memory:{max:146.11328125,min:135.58984375,mean:141.50143229166667},cpu:{max:1.9999999999999987,min:.40000000000000036,mean:.7711111111111112}},envoyProxy:{memory:{max:29.76953125,min:27.9296875,mean:29.26328125},cpu:{max:30.24145243537894,min:30.22350314191992,mean:30.22948623973959}}},poolOverflow:25,upstreamConnections:24,counters:{"benchmark.http_2xx":{value:107975,perSecond:1213.2022471910113},"benchmark.pool_overflow":{value:25,perSecond:.2808988764044944},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:24,perSecond:.2696629213483146},upstream_cx_rx_bytes_total:{value:16952075,perSecond:190472.75280898876},upstream_cx_total:{value:24,perSecond:.2696629213483146},upstream_cx_tx_bytes_total:{value:4858875,perSecond:54594.10112359551},upstream_rq_pending_overflow:{value:25,perSecond:.2808988764044944},upstream_rq_pending_total:{value:24,perSecond:.2696629213483146},upstream_rq_total:{value:107975,perSecond:1213.2022471910113}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:2020.9550561797753,totalRequests:179865,latency:{max:104.263679,min:.33550399999999997,mean:.539038,pstdev:.863241,percentiles:{p50:.465887,p75:.521359,p80:.549887,p90:.658143,p95:.761823,p99:1.716479,p999:7.473919}},resources:{envoyGateway:{memory:{max:148.65625,min:137.18359375,mean:144.56315104166666},cpu:{max:2.7333333333333343,min:.5333333333333339,mean:.9666666666666668}},envoyProxy:{memory:{max:36.41015625,min:33.765625,mean:35.787109375},cpu:{max:45.66901459854013,min:45.04842244701349,mean:45.243921833694976}}},poolOverflow:135,upstreamConnections:48,counters:{"benchmark.http_2xx":{value:179865,perSecond:2020.9550561797753},"benchmark.pool_overflow":{value:135,perSecond:1.5168539325842696},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:48,perSecond:.5393258426966292},upstream_cx_rx_bytes_total:{value:28238805,perSecond:317289.9438202247},upstream_cx_total:{value:48,perSecond:.5393258426966292},upstream_cx_tx_bytes_total:{value:8093925,perSecond:90942.97752808989},upstream_rq_pending_overflow:{value:135,perSecond:1.5168539325842696},upstream_rq_pending_total:{value:48,perSecond:.5393258426966292},upstream_rq_total:{value:179865,perSecond:2020.9550561797753}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3197.4222222222224,totalRequests:287768,latency:{max:99.41401499999999,min:.319616,mean:1.147704,pstdev:4.4813860000000005,percentiles:{p50:.594687,p75:.687487,p80:.742047,p90:1.042047,p95:1.562431,p99:15.768575,p999:70.324223}},resources:{envoyGateway:{memory:{max:154.125,min:140.8671875,mean:151.02200520833333},cpu:{max:4.9333333333333345,min:.5999999999999991,mean:1.5511111111111098}},envoyProxy:{memory:{max:68.3515625,min:57.90234375,mean:64.46614583333333},cpu:{max:68.30009668842146,min:43.403573110547036,mean:62.29201721165111}}},poolOverflow:56,upstreamConnections:264,counters:{"benchmark.http_2xx":{value:287768,perSecond:3197.4222222222224},"benchmark.pool_overflow":{value:56,perSecond:.6222222222222222},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:264,perSecond:2.933333333333333},upstream_cx_rx_bytes_total:{value:45179576,perSecond:501995.2888888889},upstream_cx_total:{value:264,perSecond:2.933333333333333},upstream_cx_tx_bytes_total:{value:12957480,perSecond:143972},upstream_rq_pending_overflow:{value:56,perSecond:.6222222222222222},upstream_rq_pending_total:{value:264,perSecond:2.933333333333333},upstream_rq_total:{value:287944,perSecond:3199.3777777777777}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3999.5777777777776,totalRequests:359962,latency:{max:386.252799,min:.307408,mean:2.964271,pstdev:14.94732,percentiles:{p50:.611135,p75:.7879989999999999,p80:.863615,p90:1.354687,p95:3.6558070000000003,p99:74.362879,p999:160.923647}},resources:{envoyGateway:{memory:{max:171.26953125,min:161.11328125,mean:166.31549479166668},cpu:{max:6.866666666666673,min:.86666666666666,mean:2.0600000000000005}},envoyProxy:{memory:{max:95.4609375,min:84.73046875,mean:91.400390625},cpu:{max:82.5813865584955,min:45.283503319351,mean:72.3024265227598}}},poolOverflow:30,upstreamConnections:370,counters:{"benchmark.http_2xx":{value:359962,perSecond:3999.5777777777776},"benchmark.pool_overflow":{value:30,perSecond:.3333333333333333},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:370,perSecond:4.111111111111111},upstream_cx_rx_bytes_total:{value:56514034,perSecond:627933.7111111111},upstream_cx_total:{value:370,perSecond:4.111111111111111},upstream_cx_tx_bytes_total:{value:16198650,perSecond:179985},upstream_rq_pending_overflow:{value:30,perSecond:.3333333333333333},upstream_rq_pending_total:{value:370,perSecond:4.111111111111111},upstream_rq_total:{value:359970,perSecond:3999.6666666666665}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5057.266666666666,totalRequests:455154,latency:{max:1285.9473910000002,min:1.371584,mean:59.338332,pstdev:19.470976,percentiles:{p50:57.772031,p75:66.177023,p80:67.76831899999999,p90:71.90118299999999,p95:78.733311,p99:111.398911,p999:167.215103}},resources:{envoyGateway:{memory:{max:188.16015625,min:171.28515625,mean:182.01666666666668},cpu:{max:14.13333333333327,min:.8666666666666363,mean:2.964444444444452}},envoyProxy:{memory:{max:145.08984375,min:139.8203125,mean:143.387890625},cpu:{max:99.22699520543796,min:60.78907448875107,mean:92.6174535512916}}},poolOverflow:98,upstreamConnections:302,counters:{"benchmark.http_2xx":{value:455154,perSecond:5057.266666666666},"benchmark.pool_overflow":{value:98,perSecond:1.0888888888888888},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:302,perSecond:3.3555555555555556},upstream_cx_rx_bytes_total:{value:71459178,perSecond:793990.8666666667},upstream_cx_total:{value:302,perSecond:3.3555555555555556},upstream_cx_tx_bytes_total:{value:20495520,perSecond:227728},upstream_rq_pending_overflow:{value:98,perSecond:1.0888888888888888},upstream_rq_pending_total:{value:302,perSecond:3.3555555555555556},upstream_rq_total:{value:455456,perSecond:5060.622222222222}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3999.233333333333,totalRequests:359931,latency:{max:385.597439,min:.31702400000000003,mean:2.6073619999999997,pstdev:12.422353000000001,percentiles:{p50:.617951,p75:.7978230000000001,p80:.873503,p90:1.409791,p95:3.412095,p99:67.915775,p999:139.509759}},resources:{envoyGateway:{memory:{max:176.8359375,min:171.98046875,mean:173.68333333333334},cpu:{max:1.1333333333333446,min:1.0000000000000377,mean:1.106060606060612}},envoyProxy:{memory:{max:145.45703125,min:143.30859375,mean:144.875},cpu:{max:82.85775245913221,min:44.665104008759954,mean:76.23169817649351}}},poolOverflow:68,upstreamConnections:332,counters:{"benchmark.http_2xx":{value:359931,perSecond:3999.233333333333},"benchmark.pool_overflow":{value:68,perSecond:.7555555555555555},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:332,perSecond:3.688888888888889},upstream_cx_rx_bytes_total:{value:56509167,perSecond:627879.6333333333},upstream_cx_total:{value:332,perSecond:3.688888888888889},upstream_cx_tx_bytes_total:{value:16196940,perSecond:179966},upstream_rq_pending_overflow:{value:68,perSecond:.7555555555555555},upstream_rq_pending_total:{value:332,perSecond:3.688888888888889},upstream_rq_total:{value:359932,perSecond:3999.2444444444445}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3199.6111111111113,totalRequests:287965,latency:{max:80.625663,min:.322336,mean:1.0790170000000001,pstdev:3.7298549999999997,percentiles:{p50:.598207,p75:.7040310000000001,p80:.780127,p90:1.153535,p95:1.6243830000000001,p99:11.442687,p999:61.790207}},resources:{envoyGateway:{memory:{max:175.10546875,min:161.109375,mean:163.90182291666667},cpu:{max:1.1333333333333449,min:.9333333333332423,mean:1.0638888888888844}},envoyProxy:{memory:{max:143.6328125,min:141.3671875,mean:142.62200520833332},cpu:{max:68.99807624218096,min:67.9146420263634,mean:68.48326157169933}}},poolOverflow:35,upstreamConnections:230,counters:{"benchmark.http_2xx":{value:287965,perSecond:3199.6111111111113},"benchmark.pool_overflow":{value:35,perSecond:.3888888888888889},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:230,perSecond:2.5555555555555554},upstream_cx_rx_bytes_total:{value:45210505,perSecond:502338.94444444444},upstream_cx_total:{value:230,perSecond:2.5555555555555554},upstream_cx_tx_bytes_total:{value:12958425,perSecond:143982.5},upstream_rq_pending_overflow:{value:35,perSecond:.3888888888888889},upstream_rq_pending_total:{value:230,perSecond:2.5555555555555554},upstream_rq_total:{value:287965,perSecond:3199.6111111111113}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:1998.3777777777777,totalRequests:179854,latency:{max:62.019583000000004,min:.327328,mean:.485828,pstdev:.668839,percentiles:{p50:.423551,p75:.443055,p80:.449919,p90:.479887,p95:.620959,p99:1.817983,p999:8.064511}},resources:{envoyGateway:{memory:{max:165.8046875,min:152.2734375,mean:156.540234375},cpu:{max:1.2000000000000455,min:.9999999999999432,mean:1.0666666666666655}},envoyProxy:{memory:{max:141.15234375,min:139.859375,mean:140.26106770833334},cpu:{max:45.485545566719395,min:31.71803855746116,mean:44.091576143376344}}},poolOverflow:146,upstreamConnections:48,counters:{"benchmark.http_2xx":{value:179854,perSecond:1998.3777777777777},"benchmark.pool_overflow":{value:146,perSecond:1.6222222222222222},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:48,perSecond:.5333333333333333},upstream_cx_rx_bytes_total:{value:28237078,perSecond:313745.31111111114},upstream_cx_total:{value:48,perSecond:.5333333333333333},upstream_cx_tx_bytes_total:{value:8093430,perSecond:89927},upstream_rq_pending_overflow:{value:146,perSecond:1.6222222222222222},upstream_rq_pending_total:{value:48,perSecond:.5333333333333333},upstream_rq_total:{value:179854,perSecond:1998.3777777777777}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1213.0224719101125,totalRequests:107959,latency:{max:64.030719,min:.34096000000000004,mean:.484964,pstdev:.641611,percentiles:{p50:.440847,p75:.45943900000000004,p80:.464143,p90:.48572699999999996,p95:.531871,p99:1.361407,p999:5.570815}},resources:{envoyGateway:{memory:{max:155.21484375,min:146.46484375,mean:150.92682291666668},cpu:{max:1.2666666666666515,min:.9999999999999432,mean:1.1166666666666694}},envoyProxy:{memory:{max:140.078125,min:139.0859375,mean:139.482421875},cpu:{max:30.431386861314387,min:28.98025197235646,mean:30.07745151829415}}},poolOverflow:41,upstreamConnections:28,counters:{"benchmark.http_2xx":{value:107959,perSecond:1213.0224719101125},"benchmark.pool_overflow":{value:41,perSecond:.4606741573033708},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:28,perSecond:.3146067415730337},upstream_cx_rx_bytes_total:{value:16949563,perSecond:190444.52808988764},upstream_cx_total:{value:28,perSecond:.3146067415730337},upstream_cx_tx_bytes_total:{value:4858155,perSecond:54586.011235955055},upstream_rq_pending_overflow:{value:41,perSecond:.4606741573033708},upstream_rq_pending_total:{value:28,perSecond:.3146067415730337},upstream_rq_total:{value:107959,perSecond:1213.0224719101125}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:404.4719101123595,totalRequests:35998,latency:{max:45.062143,min:.365328,mean:.48585700000000004,pstdev:.49808199999999997,percentiles:{p50:.452351,p75:.46663899999999997,p80:.46991900000000003,p90:.48545499999999997,p95:.515775,p99:1.080447,p999:6.436607}},resources:{envoyGateway:{memory:{max:150.08984375,min:146.44921875,mean:147.88671875},cpu:{max:1.2000000000000455,min:.933333333333337,mean:1.0603174603174614}},envoyProxy:{memory:{max:141.55078125,min:139.140625,mean:139.66901041666668},cpu:{max:10.07732827919727,min:6.752312228571138,mean:9.510461390746068}}},poolOverflow:2,upstreamConnections:11,counters:{"benchmark.http_2xx":{value:35998,perSecond:404.4719101123595},"benchmark.pool_overflow":{value:2,perSecond:.02247191011235955},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:11,perSecond:.12359550561797752},upstream_cx_rx_bytes_total:{value:5651686,perSecond:63502.089887640446},upstream_cx_total:{value:11,perSecond:.12359550561797752},upstream_cx_tx_bytes_total:{value:1619910,perSecond:18201.23595505618},upstream_rq_pending_overflow:{value:2,perSecond:.02247191011235955},upstream_rq_pending_total:{value:11,perSecond:.12359550561797752},upstream_rq_total:{value:35998,perSecond:404.4719101123595}}}]},Dee={metadata:{version:"1.6.7",runId:"1.6.7-release-2026-04-27",date:"2026-04-27T20:16:54Z",environment:"GitHub Release",description:"Benchmark results for version 1.6.7 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.6.7/benchmark_report.zip",testConfiguration:{connections:100,cpuLimit:"1000m",duration:90,memoryLimit:"2000Mi",rps:100}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:399.9222222222222,totalRequests:35993,latency:{max:47.067135,min:.378944,mean:.49701,pstdev:.540569,percentiles:{p50:.455535,p75:.474767,p80:.480495,p90:.503663,p95:.547071,p99:1.226175,p999:6.373119}},resources:{envoyGateway:{memory:{max:139.1484375,min:119.875,mean:134.18802083333333},cpu:{max:.9333333333333335,min:.3333333333333336,mean:.5288888888888891}},envoyProxy:{memory:{max:28.12109375,min:4.859375,mean:25.583072916666666},cpu:{max:10.268738200125863,min:5.4939283145112325,mean:7.653110203221817}}},poolOverflow:7,upstreamConnections:12,counters:{"benchmark.http_2xx":{value:35993,perSecond:399.9222222222222},"benchmark.pool_overflow":{value:7,perSecond:.07777777777777778},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:12,perSecond:.13333333333333333},upstream_cx_rx_bytes_total:{value:5650901,perSecond:62787.78888888889},upstream_cx_total:{value:12,perSecond:.13333333333333333},upstream_cx_tx_bytes_total:{value:1619685,perSecond:17996.5},upstream_rq_pending_overflow:{value:7,perSecond:.07777777777777778},upstream_rq_pending_total:{value:12,perSecond:.13333333333333333},upstream_rq_total:{value:35993,perSecond:399.9222222222222}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1212.438202247191,totalRequests:107907,latency:{max:61.036543,min:.345056,mean:.49985100000000005,pstdev:.832388,percentiles:{p50:.45359900000000003,p75:.467951,p80:.472831,p90:.49551900000000004,p95:.5390389999999999,p99:1.290431,p999:7.4393590000000005}},resources:{envoyGateway:{memory:{max:147.07421875,min:140.265625,mean:143.76028645833333},cpu:{max:2.1333333333333337,min:.40000000000000036,mean:.7977777777777771}},envoyProxy:{memory:{max:33.90625,min:27.37890625,mean:32.03515625},cpu:{max:30.00747150259066,min:30.00747150259066,mean:30.00747150259066}}},poolOverflow:93,upstreamConnections:34,counters:{"benchmark.http_2xx":{value:107907,perSecond:1212.438202247191},"benchmark.pool_overflow":{value:93,perSecond:1.0449438202247192},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:34,perSecond:.38202247191011235},upstream_cx_rx_bytes_total:{value:16941399,perSecond:190352.79775280898},upstream_cx_total:{value:34,perSecond:.38202247191011235},upstream_cx_tx_bytes_total:{value:4855815,perSecond:54559.7191011236},upstream_rq_pending_overflow:{value:93,perSecond:1.0449438202247192},upstream_rq_pending_total:{value:34,perSecond:.38202247191011235},upstream_rq_total:{value:107907,perSecond:1212.438202247191}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:1997.611111111111,totalRequests:179785,latency:{max:90.980351,min:.3476,mean:.521672,pstdev:.9244789999999999,percentiles:{p50:.452687,p75:.474287,p80:.48307100000000003,p90:.5064470000000001,p95:.586111,p99:1.869439,p999:10.968063}},resources:{envoyGateway:{memory:{max:147.62890625,min:138.10546875,mean:145.30078125},cpu:{max:2.7999999999999994,min:.5333333333333339,mean:.9888888888888888}},envoyProxy:{memory:{max:40.01171875,min:37.4765625,mean:38.424869791666666},cpu:{max:49.459333478544984,min:34.124251895301164,mean:46.837576796026426}}},poolOverflow:213,upstreamConnections:59,counters:{"benchmark.http_2xx":{value:179785,perSecond:1997.611111111111},"benchmark.pool_overflow":{value:213,perSecond:2.3666666666666667},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:59,perSecond:.6555555555555556},upstream_cx_rx_bytes_total:{value:28226245,perSecond:313624.94444444444},upstream_cx_total:{value:59,perSecond:.6555555555555556},upstream_cx_tx_bytes_total:{value:8090415,perSecond:89893.5},upstream_rq_pending_overflow:{value:213,perSecond:2.3666666666666667},upstream_rq_pending_total:{value:59,perSecond:.6555555555555556},upstream_rq_total:{value:179787,perSecond:1997.6333333333334}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3198.7555555555555,totalRequests:287888,latency:{max:151.90425499999998,min:.326016,mean:1.168468,pstdev:5.222306000000001,percentiles:{p50:.531871,p75:.633407,p80:.693887,p90:.9335669999999999,p95:1.418751,p99:21.561343,p999:76.386303}},resources:{envoyGateway:{memory:{max:159.078125,min:144.9375,mean:153.85286458333334},cpu:{max:5,min:.6666666666666643,mean:1.5444444444444447}},envoyProxy:{memory:{max:72.27734375,min:59.99609375,mean:66.97721354166667},cpu:{max:77.5605855855856,min:46.243881959734054,mean:65.97234530390695}}},poolOverflow:112,upstreamConnections:240,counters:{"benchmark.http_2xx":{value:287888,perSecond:3198.7555555555555},"benchmark.pool_overflow":{value:112,perSecond:1.2444444444444445},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:240,perSecond:2.6666666666666665},upstream_cx_rx_bytes_total:{value:45198416,perSecond:502204.6222222222},upstream_cx_total:{value:240,perSecond:2.6666666666666665},upstream_cx_tx_bytes_total:{value:12954960,perSecond:143944},upstream_rq_pending_overflow:{value:112,perSecond:1.2444444444444445},upstream_rq_pending_total:{value:240,perSecond:2.6666666666666665},upstream_rq_total:{value:287888,perSecond:3198.7555555555555}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3998.777777777778,totalRequests:359890,latency:{max:202.014719,min:.329824,mean:3.292303,pstdev:13.431645000000001,percentiles:{p50:.566399,p75:.771711,p80:.860031,p90:1.660223,p95:8.354559,p99:81.367039,p999:141.672447}},resources:{envoyGateway:{memory:{max:164.703125,min:157.4453125,mean:161.54361979166666},cpu:{max:7.666666666666658,min:.933333333333337,mean:2.0888889022222217}},envoyProxy:{memory:{max:98.875,min:89.01171875,mean:94.38020833333333},cpu:{max:95.24843349258227,min:92.57570059190199,mean:93.24388381707206}}},poolOverflow:107,upstreamConnections:293,counters:{"benchmark.http_2xx":{value:359890,perSecond:3998.777777777778},"benchmark.pool_overflow":{value:107,perSecond:1.1888888888888889},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:293,perSecond:3.2555555555555555},upstream_cx_rx_bytes_total:{value:56502730,perSecond:627808.1111111111},upstream_cx_total:{value:293,perSecond:3.2555555555555555},upstream_cx_tx_bytes_total:{value:16195185,perSecond:179946.5},upstream_rq_pending_overflow:{value:107,perSecond:1.1888888888888889},upstream_rq_pending_total:{value:293,perSecond:3.2555555555555555},upstream_rq_total:{value:359893,perSecond:3998.811111111111}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:4983.211111111111,totalRequests:448489,latency:{max:216.915967,min:.41708799999999996,mean:46.134673,pstdev:35.280172,percentiles:{p50:33.787903,p75:76.439551,p80:80.596991,p90:92.073983,p95:100.651007,p99:120.58623899999999,p999:180.092927}},resources:{envoyGateway:{memory:{max:196.02734375,min:184.22265625,mean:190.77174479166666},cpu:{max:14.133333333333365,min:.7330889703432152,mean:2.902090894976589}},envoyProxy:{memory:{max:155.6484375,min:149.3828125,mean:154.801953125},cpu:{max:100.0690987454784,min:99.85133052721676,mean:99.94811640199971}}},poolOverflow:161,upstreamConnections:239,counters:{"benchmark.http_2xx":{value:448489,perSecond:4983.211111111111},"benchmark.pool_overflow":{value:161,perSecond:1.788888888888889},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:239,perSecond:2.6555555555555554},upstream_cx_rx_bytes_total:{value:70412773,perSecond:782364.1444444444},upstream_cx_total:{value:239,perSecond:2.6555555555555554},upstream_cx_tx_bytes_total:{value:20186415,perSecond:224293.5},upstream_rq_pending_overflow:{value:161,perSecond:1.788888888888889},upstream_rq_pending_total:{value:239,perSecond:2.6555555555555554},upstream_rq_total:{value:448587,perSecond:4984.3}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3997.8555555555554,totalRequests:359807,latency:{max:166.436863,min:.32673599999999997,mean:2.4847099999999998,pstdev:10.041276,percentiles:{p50:.543615,p75:.7288629999999999,p80:.817535,p90:1.6024310000000002,p95:5.248511,p99:65.257471,p999:98.025471}},resources:{envoyGateway:{memory:{max:191.90234375,min:172.84375,mean:178.55078125},cpu:{max:3.1333333333333253,min:.9999999999999432,mean:1.520000000000001}},envoyProxy:{memory:{max:154.890625,min:153.66015625,mean:154.521484375},cpu:{max:96.44166481933075,min:52.320209673316576,mean:88.50193902863825}}},poolOverflow:193,upstreamConnections:207,counters:{"benchmark.http_2xx":{value:359807,perSecond:3997.8555555555554},"benchmark.pool_overflow":{value:193,perSecond:2.1444444444444444},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:207,perSecond:2.3},upstream_cx_rx_bytes_total:{value:56489699,perSecond:627663.3222222222},upstream_cx_total:{value:207,perSecond:2.3},upstream_cx_tx_bytes_total:{value:16191315,perSecond:179903.5},upstream_rq_pending_overflow:{value:193,perSecond:2.1444444444444444},upstream_rq_pending_total:{value:207,perSecond:2.3},upstream_rq_total:{value:359807,perSecond:3997.8555555555554}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3198.222222222222,totalRequests:287840,latency:{max:110.284799,min:.321408,mean:1.079807,pstdev:4.7962739999999995,percentiles:{p50:.512159,p75:.591199,p80:.6246389999999999,p90:.794207,p95:1.124415,p99:21.080063,p999:69.353471}},resources:{envoyGateway:{memory:{max:171.6640625,min:155.78515625,mean:160.75598958333333},cpu:{max:1.1999999999999509,min:1.066666666666644,mean:1.0956521739130352}},envoyProxy:{memory:{max:154.83984375,min:148.24609375,mean:149.51236979166666},cpu:{max:77.58169163932948,min:42.21342170869475,mean:61.567339702727715}}},poolOverflow:158,upstreamConnections:209,counters:{"benchmark.http_2xx":{value:287840,perSecond:3198.222222222222},"benchmark.pool_overflow":{value:158,perSecond:1.7555555555555555},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:209,perSecond:2.3222222222222224},upstream_cx_rx_bytes_total:{value:45190880,perSecond:502120.8888888889},upstream_cx_total:{value:209,perSecond:2.3222222222222224},upstream_cx_tx_bytes_total:{value:12952845,perSecond:143920.5},upstream_rq_pending_overflow:{value:158,perSecond:1.7555555555555555},upstream_rq_pending_total:{value:209,perSecond:2.3222222222222224},upstream_rq_total:{value:287841,perSecond:3198.233333333333}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:1996.7222222222222,totalRequests:179705,latency:{max:111.64876699999999,min:.353088,mean:.518911,pstdev:1.016197,percentiles:{p50:.456271,p75:.469279,p80:.473775,p90:.501503,p95:.581151,p99:1.7482229999999999,p999:8.471039}},resources:{envoyGateway:{memory:{max:158.65234375,min:149.59765625,mean:153.23697916666666},cpu:{max:1.1333333333333446,min:1.066666666666644,mean:1.0833333333333186}},envoyProxy:{memory:{max:148.0859375,min:147.0859375,mean:147.59361979166667},cpu:{max:50.94044791886718,min:50.70775568181835,mean:50.8628838398509}}},poolOverflow:295,upstreamConnections:59,counters:{"benchmark.http_2xx":{value:179705,perSecond:1996.7222222222222},"benchmark.pool_overflow":{value:295,perSecond:3.2777777777777777},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:59,perSecond:.6555555555555556},upstream_cx_rx_bytes_total:{value:28213685,perSecond:313485.3888888889},upstream_cx_total:{value:59,perSecond:.6555555555555556},upstream_cx_tx_bytes_total:{value:8086725,perSecond:89852.5},upstream_rq_pending_overflow:{value:295,perSecond:3.2777777777777777},upstream_rq_pending_total:{value:59,perSecond:.6555555555555556},upstream_rq_total:{value:179705,perSecond:1996.7222222222222}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1212.5056179775281,totalRequests:107913,latency:{max:79.536127,min:.34924799999999995,mean:.540723,pstdev:.816151,percentiles:{p50:.468959,p75:.522239,p80:.537631,p90:.5840310000000001,p95:.6754870000000001,p99:1.557567,p999:9.940991}},resources:{envoyGateway:{memory:{max:151.6484375,min:148.71484375,mean:150.14205729166667},cpu:{max:1.066666666666644,min:1.0000000000000377,mean:1.0515151515151426}},envoyProxy:{memory:{max:147.75390625,min:146.85546875,mean:147.240625},cpu:{max:30.839552297012645,min:20.589903930428164,mean:27.965147793636593}}},poolOverflow:86,upstreamConnections:40,counters:{"benchmark.http_2xx":{value:107913,perSecond:1212.5056179775281},"benchmark.pool_overflow":{value:86,perSecond:.9662921348314607},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:40,perSecond:.449438202247191},upstream_cx_rx_bytes_total:{value:16942341,perSecond:190363.38202247192},upstream_cx_total:{value:40,perSecond:.449438202247191},upstream_cx_tx_bytes_total:{value:4856085,perSecond:54562.752808988764},upstream_rq_pending_overflow:{value:86,perSecond:.9662921348314607},upstream_rq_pending_total:{value:40,perSecond:.449438202247191},upstream_rq_total:{value:107913,perSecond:1212.5056179775281}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:404.39325842696627,totalRequests:35991,latency:{max:43.788287000000004,min:.36227200000000004,mean:.493254,pstdev:.590515,percentiles:{p50:.455775,p75:.47031900000000004,p80:.47356699999999996,p90:.489807,p95:.522671,p99:1.0246389999999999,p999:8.825343}},resources:{envoyGateway:{memory:{max:150.1953125,min:145.38671875,mean:147.28645833333334},cpu:{max:1.1333333333333446,min:.933333333333337,mean:1.0499933546663929}},envoyProxy:{memory:{max:147.5703125,min:146.84375,mean:147.04609375},cpu:{max:10.200383393028265,min:9.953618421052257,mean:10.07700090704026}}},poolOverflow:9,upstreamConnections:12,counters:{"benchmark.http_2xx":{value:35991,perSecond:404.39325842696627},"benchmark.pool_overflow":{value:9,perSecond:.10112359550561797},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:12,perSecond:.1348314606741573},upstream_cx_rx_bytes_total:{value:5650587,perSecond:63489.74157303371},upstream_cx_total:{value:12,perSecond:.1348314606741573},upstream_cx_tx_bytes_total:{value:1619595,perSecond:18197.696629213482},upstream_rq_pending_overflow:{value:9,perSecond:.10112359550561797},upstream_rq_pending_total:{value:12,perSecond:.1348314606741573},upstream_rq_total:{value:35991,perSecond:404.39325842696627}}}]},$ee={metadata:{version:"1.7.3",runId:"1.7.3-release-2026-05-09",date:"2026-05-09T23:13:52Z",environment:"GitHub Release",description:"Benchmark results for version 1.7.3 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.7.3/benchmark_report.zip",testConfiguration:{connections:100,cpuLimit:"1000m",duration:90,memoryLimit:"2000Mi",rps:100}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:404.44943820224717,totalRequests:35996,latency:{max:46.344191,min:.38296,mean:.535867,pstdev:.58933,percentiles:{p50:.47548700000000005,p75:.496943,p80:.5047670000000001,p90:.541695,p95:.627551,p99:2.049343,p999:7.107583}},resources:{envoyGateway:{memory:{max:137.67578125,min:117.6484375,mean:135.65533854166668},cpu:{max:1.4000000000000006,min:.3333333333333336,mean:.6252873563218392}},envoyProxy:{memory:{max:24.73828125,min:24.26953125,mean:24.435807291666666},cpu:{max:10.468080415045396,min:10.427154828411808,mean:10.433975759517407}}},poolOverflow:4,upstreamConnections:12,counters:{"benchmark.http_2xx":{value:35996,perSecond:404.44943820224717},"benchmark.pool_overflow":{value:4,perSecond:.0449438202247191},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:12,perSecond:.1348314606741573},upstream_cx_rx_bytes_total:{value:5651372,perSecond:63498.56179775281},upstream_cx_total:{value:12,perSecond:.1348314606741573},upstream_cx_tx_bytes_total:{value:1619820,perSecond:18200.224719101123},upstream_rq_pending_overflow:{value:4,perSecond:.0449438202247191},upstream_rq_pending_total:{value:12,perSecond:.1348314606741573},upstream_rq_total:{value:35996,perSecond:404.44943820224717}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1212.7191011235955,totalRequests:107932,latency:{max:56.348671,min:.352256,mean:.5176000000000001,pstdev:.836032,percentiles:{p50:.458511,p75:.47571100000000005,p80:.482431,p90:.511647,p95:.579231,p99:1.619263,p999:10.062335000000001}},resources:{envoyGateway:{memory:{max:147.06640625,min:137.546875,mean:144.12955729166666},cpu:{max:2.0666666666666655,min:.40000000000000036,mean:.7888888888888892}},envoyProxy:{memory:{max:31.00390625,min:28.80078125,mean:30.55546875},cpu:{max:31.896429069605237,min:20.159596644847134,mean:29.888655497563743}}},poolOverflow:68,upstreamConnections:40,counters:{"benchmark.http_2xx":{value:107932,perSecond:1212.7191011235955},"benchmark.pool_overflow":{value:68,perSecond:.7640449438202247},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:40,perSecond:.449438202247191},upstream_cx_rx_bytes_total:{value:16945324,perSecond:190396.8988764045},upstream_cx_total:{value:40,perSecond:.449438202247191},upstream_cx_tx_bytes_total:{value:4856940,perSecond:54572.3595505618},upstream_rq_pending_overflow:{value:68,perSecond:.7640449438202247},upstream_rq_pending_total:{value:40,perSecond:.449438202247191},upstream_rq_total:{value:107932,perSecond:1212.7191011235955}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:1999.2666666666667,totalRequests:179934,latency:{max:982.4829430000001,min:.33972800000000003,mean:2.467626,pstdev:30.439479,percentiles:{p50:.45207899999999995,p75:.479439,p80:.488863,p90:.567295,p95:.8977269999999999,p99:37.341183,p999:379.46982299999996}},resources:{envoyGateway:{memory:{max:148.5703125,min:138.1640625,mean:145.23307291666666},cpu:{max:2.7999999999999994,min:.5999999999999991,mean:1.0733333333333335}},envoyProxy:{memory:{max:47.19140625,min:34.671875,mean:43.625390625},cpu:{max:48.564002664002736,min:28.511621210313688,mean:42.71705709892529}}},poolOverflow:66,upstreamConnections:334,counters:{"benchmark.http_2xx":{value:179934,perSecond:1999.2666666666667},"benchmark.pool_overflow":{value:66,perSecond:.7333333333333333},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:334,perSecond:3.7111111111111112},upstream_cx_rx_bytes_total:{value:28249638,perSecond:313884.86666666664},upstream_cx_total:{value:334,perSecond:3.7111111111111112},upstream_cx_tx_bytes_total:{value:8097030,perSecond:89967},upstream_rq_pending_overflow:{value:66,perSecond:.7333333333333333},upstream_rq_pending_total:{value:334,perSecond:3.7111111111111112},upstream_rq_total:{value:179934,perSecond:1999.2666666666667}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3199.4,totalRequests:287946,latency:{max:3029.991423,min:.3276,mean:4.983300000000001,pstdev:62.79289000000001,percentiles:{p50:.623775,p75:.809791,p80:.916447,p90:1.6968949999999998,p95:11.373567,p99:65.62815900000001,p999:194.78937499999998}},resources:{envoyGateway:{memory:{max:151.1015625,min:143.8828125,mean:149.07669270833333},cpu:{max:5.400000000000003,min:.86666666666666,mean:1.8244444444444445}},envoyProxy:{memory:{max:71.67578125,min:63.6171875,mean:68.65364583333333},cpu:{max:77.8570545746389,min:51.385197588890605,mean:68.08387131390853}}},poolOverflow:52,upstreamConnections:348,counters:{"benchmark.http_2xx":{value:287946,perSecond:3199.4},"benchmark.pool_overflow":{value:52,perSecond:.5777777777777777},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:348,perSecond:3.8666666666666667},upstream_cx_rx_bytes_total:{value:45207522,perSecond:502305.8},upstream_cx_total:{value:348,perSecond:3.8666666666666667},upstream_cx_tx_bytes_total:{value:12957660,perSecond:143974},upstream_rq_pending_overflow:{value:52,perSecond:.5777777777777777},upstream_rq_pending_total:{value:348,perSecond:3.8666666666666667},upstream_rq_total:{value:287948,perSecond:3199.4222222222224}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3997.9777777777776,totalRequests:359818,latency:{max:244.654079,min:.332464,mean:2.5921220000000003,pstdev:9.425811,percentiles:{p50:.7054389999999999,p75:.918815,p80:1.020703,p90:1.9464949999999999,p95:6.685439,p99:62.543871,p999:90.509311}},resources:{envoyGateway:{memory:{max:168.64453125,min:162.08203125,mean:166.54466145833334},cpu:{max:8.066666666666672,min:.9999999999999905,mean:2.2821052102695236}},envoyProxy:{memory:{max:89.4921875,min:85.69140625,mean:88.01627604166667},cpu:{max:0,min:0,mean:0}}},poolOverflow:179,upstreamConnections:221,counters:{"benchmark.http_2xx":{value:359818,perSecond:3997.9777777777776},"benchmark.pool_overflow":{value:179,perSecond:1.988888888888889},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:221,perSecond:2.4555555555555557},upstream_cx_rx_bytes_total:{value:56491426,perSecond:627682.5111111111},upstream_cx_total:{value:221,perSecond:2.4555555555555557},upstream_cx_tx_bytes_total:{value:16191945,perSecond:179910.5},upstream_rq_pending_overflow:{value:179,perSecond:1.988888888888889},upstream_rq_pending_total:{value:221,perSecond:2.4555555555555557},upstream_rq_total:{value:359821,perSecond:3998.011111111111}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5138.511111111111,totalRequests:462466,latency:{max:950.337535,min:1.663616,mean:49.312019,pstdev:14.934874,percentiles:{p50:48.105470999999994,p75:54.161407000000004,p80:55.447551,p90:58.933247,p95:63.86278300000001,p99:102.187007,p999:155.000831}},resources:{envoyGateway:{memory:{max:188.54296875,min:179.57421875,mean:186.373046875},cpu:{max:13.933333333333357,min:1.0000000000000377,mean:3.299999999999998}},envoyProxy:{memory:{max:148.27734375,min:134.01953125,mean:142.86770833333333},cpu:{max:99.96877736845785,min:51.17226004171184,mean:86.03022160635253}}},poolOverflow:145,upstreamConnections:255,counters:{"benchmark.http_2xx":{value:462466,perSecond:5138.511111111111},"benchmark.pool_overflow":{value:145,perSecond:1.6111111111111112},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:255,perSecond:2.8333333333333335},upstream_cx_rx_bytes_total:{value:72607162,perSecond:806746.2444444444},upstream_cx_total:{value:255,perSecond:2.8333333333333335},upstream_cx_tx_bytes_total:{value:20822220,perSecond:231358},upstream_rq_pending_overflow:{value:145,perSecond:1.6111111111111112},upstream_rq_pending_total:{value:255,perSecond:2.8333333333333335},upstream_rq_total:{value:462716,perSecond:5141.288888888889}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3998.5,totalRequests:359865,latency:{max:2133.524479,min:.33208,mean:6.480329,pstdev:35.650090000000006,percentiles:{p50:.727711,p75:1.060223,p80:1.356671,p90:9.771519,p95:44.038143000000005,p99:90.968063,p999:164.429823}},resources:{envoyGateway:{memory:{max:179.8125,min:162.421875,mean:170.29466145833334},cpu:{max:1.2666666666666515,min:.8666666666666363,mean:1.1565217391304292}},envoyProxy:{memory:{max:144.08203125,min:142.3828125,mean:143.41341145833334},cpu:{max:65.76390265911255,min:44.97408887731358,mean:54.14164684504709}}},poolOverflow:132,upstreamConnections:268,counters:{"benchmark.http_2xx":{value:359865,perSecond:3998.5},"benchmark.pool_overflow":{value:132,perSecond:1.4666666666666666},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:268,perSecond:2.977777777777778},upstream_cx_rx_bytes_total:{value:56498805,perSecond:627764.5},upstream_cx_total:{value:268,perSecond:2.977777777777778},upstream_cx_tx_bytes_total:{value:16194060,perSecond:179934},upstream_rq_pending_overflow:{value:132,perSecond:1.4666666666666666},upstream_rq_pending_total:{value:268,perSecond:2.977777777777778},upstream_rq_total:{value:359868,perSecond:3998.5333333333333}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3182.8333333333335,totalRequests:286455,latency:{max:489.89798299999995,min:.330016,mean:2.042146,pstdev:11.847002,percentiles:{p50:.615935,p75:.7458229999999999,p80:.833087,p90:1.343807,p95:2.417791,p99:46.784511,p999:224.002047}},resources:{envoyGateway:{memory:{max:169.71875,min:156.6015625,mean:164.18645833333332},cpu:{max:1.3333333333333524,min:1.066666666666644,mean:1.1650793650793705}},envoyProxy:{memory:{max:142.4296875,min:141.1640625,mean:141.56002604166667},cpu:{max:73.5007114191903,min:43.6545225355711,mean:65.09343172003922}}},poolOverflow:126,upstreamConnections:274,counters:{"benchmark.http_2xx":{value:286455,perSecond:3182.8333333333335},"benchmark.pool_overflow":{value:126,perSecond:1.4},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:274,perSecond:3.0444444444444443},upstream_cx_rx_bytes_total:{value:44973435,perSecond:499704.8333333333},upstream_cx_total:{value:274,perSecond:3.0444444444444443},upstream_cx_tx_bytes_total:{value:12902805,perSecond:143364.5},upstream_rq_pending_overflow:{value:126,perSecond:1.4},upstream_rq_pending_total:{value:274,perSecond:3.0444444444444443},upstream_rq_total:{value:286729,perSecond:3185.8777777777777}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:1998.388888888889,totalRequests:179855,latency:{max:147.406847,min:.339904,mean:.5224789999999999,pstdev:.6352289999999999,percentiles:{p50:.453471,p75:.47263900000000003,p80:.478431,p90:.517999,p95:.724191,p99:2.087359,p999:7.226879}},resources:{envoyGateway:{memory:{max:156.8125,min:147.4296875,mean:150.44973958333333},cpu:{max:1.2666666666666517,min:1.066666666666644,mean:1.1277777777777709}},envoyProxy:{memory:{max:140.5390625,min:140.19921875,mean:140.38294270833333},cpu:{max:51.33240404359542,min:33.86808667887703,mean:48.447040965036784}}},poolOverflow:142,upstreamConnections:48,counters:{"benchmark.http_2xx":{value:179855,perSecond:1998.388888888889},"benchmark.pool_overflow":{value:142,perSecond:1.5777777777777777},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:48,perSecond:.5333333333333333},upstream_cx_rx_bytes_total:{value:28237235,perSecond:313747.05555555556},upstream_cx_total:{value:48,perSecond:.5333333333333333},upstream_cx_tx_bytes_total:{value:8093610,perSecond:89929},upstream_rq_pending_overflow:{value:142,perSecond:1.5777777777777777},upstream_rq_pending_total:{value:48,perSecond:.5333333333333333},upstream_rq_total:{value:179858,perSecond:1998.4222222222222}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1198.9,totalRequests:107901,latency:{max:91.013119,min:.36744000000000004,mean:.51687,pstdev:1.1865809999999999,percentiles:{p50:.455055,p75:.471199,p80:.476111,p90:.499823,p95:.548223,p99:1.549503,p999:8.814591}},resources:{envoyGateway:{memory:{max:150.85546875,min:148.97265625,mean:149.60885416666667},cpu:{max:1.2666666666666515,min:1.0000000000000377,mean:1.1142857142857159}},envoyProxy:{memory:{max:140.7421875,min:139.89453125,mean:140.21901041666666},cpu:{max:30.88898623279097,min:19.699947025365148,mean:27.62057691682817}}},poolOverflow:99,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:107901,perSecond:1198.9},"benchmark.pool_overflow":{value:99,perSecond:1.1},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:37,perSecond:.4111111111111111},upstream_cx_rx_bytes_total:{value:16940457,perSecond:188227.3},upstream_cx_total:{value:37,perSecond:.4111111111111111},upstream_cx_tx_bytes_total:{value:4855545,perSecond:53950.5},upstream_rq_pending_overflow:{value:99,perSecond:1.1},upstream_rq_pending_total:{value:37,perSecond:.4111111111111111},upstream_rq_total:{value:107901,perSecond:1198.9}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:404.39325842696627,totalRequests:35991,latency:{max:64.180223,min:.3844,mean:.502389,pstdev:.691644,percentiles:{p50:.45702299999999996,p75:.473823,p80:.479103,p90:.5029750000000001,p95:.541279,p99:1.187135,p999:8.559103}},resources:{envoyGateway:{memory:{max:150.90625,min:144.01953125,mean:146.19817708333332},cpu:{max:1.2666666666666515,min:1.066666666666644,mean:1.1391304347826023}},envoyProxy:{memory:{max:140.7421875,min:139.96875,mean:140.19140625},cpu:{max:0,min:0,mean:0}}},poolOverflow:9,upstreamConnections:15,counters:{"benchmark.http_2xx":{value:35991,perSecond:404.39325842696627},"benchmark.pool_overflow":{value:9,perSecond:.10112359550561797},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:15,perSecond:.16853932584269662},upstream_cx_rx_bytes_total:{value:5650587,perSecond:63489.74157303371},upstream_cx_total:{value:15,perSecond:.16853932584269662},upstream_cx_tx_bytes_total:{value:1619595,perSecond:18197.696629213482},upstream_rq_pending_overflow:{value:9,perSecond:.10112359550561797},upstream_rq_pending_total:{value:15,perSecond:.16853932584269662},upstream_rq_total:{value:35991,perSecond:404.39325842696627}}}]},Lee={metadata:{version:"1.8.0",runId:"1.8.0-release-2026-05-13",date:"2026-05-13T15:45:46Z",environment:"GitHub Release",description:"Benchmark results for version 1.8.0 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.8.0/benchmark_report.zip",testConfiguration:{connections:100,cpuLimit:"1000m",duration:90,memoryLimit:"2000Mi",rps:100}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:404.39325842696627,totalRequests:35991,latency:{max:60.844031,min:.37550399999999995,mean:.48515800000000003,pstdev:.5689510000000001,percentiles:{p50:.442959,p75:.460783,p80:.464623,p90:.481535,p95:.519087,p99:1.1913589999999998,p999:6.606847}},resources:{envoyGateway:{memory:{max:129.33984375,min:101.58984375,mean:122.695703125},cpu:{max:.46666666666666673,min:.33333333333333287,mean:.4111111111111112}},envoyProxy:{memory:{max:20.86328125,min:7.546875,mean:18.339574353448278},cpu:{max:10.287521430320846,min:5.4345973605157,mean:8.106397471790913}}},poolOverflow:9,upstreamConnections:12,counters:{"benchmark.http_2xx":{value:35991,perSecond:404.39325842696627},"benchmark.pool_overflow":{value:9,perSecond:.10112359550561797},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:12,perSecond:.1348314606741573},upstream_cx_rx_bytes_total:{value:5650587,perSecond:63489.74157303371},upstream_cx_total:{value:12,perSecond:.1348314606741573},upstream_cx_tx_bytes_total:{value:1619595,perSecond:18197.696629213482},upstream_rq_pending_overflow:{value:9,perSecond:.10112359550561797},upstream_rq_pending_total:{value:12,perSecond:.1348314606741573},upstream_rq_total:{value:35991,perSecond:404.39325842696627}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1212.4943820224719,totalRequests:107912,latency:{max:92.65151900000001,min:.339872,mean:.498101,pstdev:.9952330000000001,percentiles:{p50:.445919,p75:.461375,p80:.466127,p90:.49267099999999997,p95:.547999,p99:1.456383,p999:5.356287}},resources:{envoyGateway:{memory:{max:134.60546875,min:127.90625,mean:132.28541666666666},cpu:{max:.6000000000000005,min:.39999999999999886,mean:.4869565217391301}},envoyProxy:{memory:{max:24.96875,min:20.359375,mean:23.803125},cpu:{max:29.920842185542302,min:21.45938352063402,mean:28.947064689830615}}},poolOverflow:88,upstreamConnections:32,counters:{"benchmark.http_2xx":{value:107912,perSecond:1212.4943820224719},"benchmark.pool_overflow":{value:88,perSecond:.9887640449438202},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:32,perSecond:.3595505617977528},upstream_cx_rx_bytes_total:{value:16942184,perSecond:190361.61797752808},upstream_cx_total:{value:32,perSecond:.3595505617977528},upstream_cx_tx_bytes_total:{value:4856040,perSecond:54562.247191011236},upstream_rq_pending_overflow:{value:88,perSecond:.9887640449438202},upstream_rq_pending_total:{value:32,perSecond:.3595505617977528},upstream_rq_total:{value:107912,perSecond:1212.4943820224719}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:1999.0222222222221,totalRequests:179912,latency:{max:63.74195100000001,min:.348576,mean:.518629,pstdev:.836542,percentiles:{p50:.44159899999999996,p75:.46043100000000003,p80:.46492700000000003,p90:.497487,p95:.683295,p99:2.061119,p999:11.345407}},resources:{envoyGateway:{memory:{max:140.12890625,min:131.4453125,mean:137.73307291666666},cpu:{max:.6666666666666672,min:.5333333333333339,mean:.5909090909090912}},envoyProxy:{memory:{max:29.26953125,min:24.78125,mean:28.626041666666666},cpu:{max:49.50165070307723,min:35.43637304454524,mean:48.11188505844771}}},poolOverflow:88,upstreamConnections:61,counters:{"benchmark.http_2xx":{value:179912,perSecond:1999.0222222222221},"benchmark.pool_overflow":{value:88,perSecond:.9777777777777777},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:61,perSecond:.6777777777777778},upstream_cx_rx_bytes_total:{value:28246184,perSecond:313846.4888888889},upstream_cx_total:{value:61,perSecond:.6777777777777778},upstream_cx_tx_bytes_total:{value:8096040,perSecond:89956},upstream_rq_pending_overflow:{value:88,perSecond:.9777777777777777},upstream_rq_pending_total:{value:61,perSecond:.6777777777777778},upstream_rq_total:{value:179912,perSecond:1999.0222222222221}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3199.5777777777776,totalRequests:287962,latency:{max:72.74905500000001,min:.317536,mean:.86458,pstdev:2.317196,percentiles:{p50:.594783,p75:.6669430000000001,p80:.711903,p90:.9254709999999999,p95:1.382655,p99:4.547071,p999:41.443327000000004}},resources:{envoyGateway:{memory:{max:148.8984375,min:142.625,mean:146.22877604166666},cpu:{max:28.4,min:.6666666666666643,mean:6.008873485589029}},envoyProxy:{memory:{max:48.43359375,min:32.796875,mean:43.454166666666666},cpu:{max:68.6065377149196,min:68.6065377149196,mean:68.6065377149196}}},poolOverflow:35,upstreamConnections:211,counters:{"benchmark.http_2xx":{value:287962,perSecond:3199.5777777777776},"benchmark.pool_overflow":{value:35,perSecond:.3888888888888889},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:211,perSecond:2.3444444444444446},upstream_cx_rx_bytes_total:{value:45210034,perSecond:502333.7111111111},upstream_cx_total:{value:211,perSecond:2.3444444444444446},upstream_cx_tx_bytes_total:{value:12958425,perSecond:143982.5},upstream_rq_pending_overflow:{value:35,perSecond:.3888888888888889},upstream_rq_pending_total:{value:211,perSecond:2.3444444444444446},upstream_rq_total:{value:287965,perSecond:3199.6111111111113}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3999.133333333333,totalRequests:359922,latency:{max:130.183167,min:.326256,mean:1.359798,pstdev:5.120169,percentiles:{p50:.644479,p75:.814079,p80:.8828790000000001,p90:1.238335,p95:2.279423,p99:21.554174999999997,p999:76.931071}},resources:{envoyGateway:{memory:{max:167.62109375,min:153.66015625,mean:164.03059895833334},cpu:{max:49.60000000000001,min:.7333333333333295,mean:9.057777777777776}},envoyProxy:{memory:{max:69.98828125,min:49.10546875,mean:63.48033854166667},cpu:{max:82.9537167555781,min:58.941972332206745,mean:78.03539083542282}}},poolOverflow:75,upstreamConnections:325,counters:{"benchmark.http_2xx":{value:359922,perSecond:3999.133333333333},"benchmark.pool_overflow":{value:75,perSecond:.8333333333333334},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:325,perSecond:3.611111111111111},upstream_cx_rx_bytes_total:{value:56507754,perSecond:627863.9333333333},upstream_cx_total:{value:325,perSecond:3.611111111111111},upstream_cx_tx_bytes_total:{value:16196580,perSecond:179962},upstream_rq_pending_overflow:{value:75,perSecond:.8333333333333334},upstream_rq_pending_total:{value:325,perSecond:3.611111111111111},upstream_rq_total:{value:359924,perSecond:3999.1555555555556}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:6043.5,totalRequests:543915,latency:{max:1135.345663,min:2.0096,mean:51.45764500000001,pstdev:15.012057,percentiles:{p50:51.800063,p75:57.352191,p80:58.351615,p90:60.934143000000006,p95:63.979518999999996,p99:90.02188699999999,p999:135.438335}},resources:{envoyGateway:{memory:{max:194.875,min:165.51953125,mean:192.38671875},cpu:{max:94.19999999999997,min:.8000000000000304,mean:16.59333333333334}},envoyProxy:{memory:{max:105.08984375,min:80.03125,mean:100.88229166666666},cpu:{max:99.56727514596123,min:68.13554583696704,mean:93.12984261229636}}},poolOverflow:87,upstreamConnections:313,counters:{"benchmark.http_2xx":{value:543915,perSecond:6043.5},"benchmark.pool_overflow":{value:87,perSecond:.9666666666666667},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:313,perSecond:3.477777777777778},upstream_cx_rx_bytes_total:{value:85394655,perSecond:948829.5},upstream_cx_total:{value:313,perSecond:3.477777777777778},upstream_cx_tx_bytes_total:{value:24490260,perSecond:272114},upstream_rq_pending_overflow:{value:87,perSecond:.9666666666666667},upstream_rq_pending_total:{value:313,perSecond:3.477777777777778},upstream_rq_total:{value:544228,perSecond:6046.977777777778}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3999.1222222222223,totalRequests:359921,latency:{max:124.64947099999999,min:.308336,mean:1.323936,pstdev:5.229215,percentiles:{p50:.634143,p75:.8154549999999999,p80:.889439,p90:1.2160630000000001,p95:2.128127,p99:18.499583,p999:82.882559}},resources:{envoyGateway:{memory:{max:173.19140625,min:163.875,mean:167.57057291666666},cpu:{max:1.1999999999999507,min:.933333333333337,mean:1.0363636363636282}},envoyProxy:{memory:{max:104.51171875,min:102.859375,mean:103.88216145833333},cpu:{max:82.94537447151188,min:59.30601867489608,mean:79.5770549883814}}},poolOverflow:75,upstreamConnections:322,counters:{"benchmark.http_2xx":{value:359921,perSecond:3999.1222222222223},"benchmark.pool_overflow":{value:75,perSecond:.8333333333333334},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:322,perSecond:3.577777777777778},upstream_cx_rx_bytes_total:{value:56507597,perSecond:627862.1888888889},upstream_cx_total:{value:322,perSecond:3.577777777777778},upstream_cx_tx_bytes_total:{value:16196625,perSecond:179962.5},upstream_rq_pending_overflow:{value:75,perSecond:.8333333333333334},upstream_rq_pending_total:{value:322,perSecond:3.577777777777778},upstream_rq_total:{value:359925,perSecond:3999.1666666666665}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3199.411111111111,totalRequests:287947,latency:{max:69.144575,min:.31392,mean:.8586320000000001,pstdev:2.1950279999999998,percentiles:{p50:.5969909999999999,p75:.683039,p80:.7361909999999999,p90:.993631,p95:1.4826869999999999,p99:4.3184629999999995,p999:40.722431}},resources:{envoyGateway:{memory:{max:172.1328125,min:153.3828125,mean:159.8359375},cpu:{max:1.0666666666667386,min:.933333333333337,mean:1.0166666666666662}},envoyProxy:{memory:{max:103.9296875,min:102.8984375,mean:103.58268229166667},cpu:{max:68.8044860276349,min:44.415199491315,mean:62.765503557186285}}},poolOverflow:52,upstreamConnections:189,counters:{"benchmark.http_2xx":{value:287947,perSecond:3199.411111111111},"benchmark.pool_overflow":{value:52,perSecond:.5777777777777777},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:189,perSecond:2.1},upstream_cx_rx_bytes_total:{value:45207679,perSecond:502307.5444444445},upstream_cx_total:{value:189,perSecond:2.1},upstream_cx_tx_bytes_total:{value:12957660,perSecond:143974},upstream_rq_pending_overflow:{value:52,perSecond:.5777777777777777},upstream_rq_pending_total:{value:189,perSecond:2.1},upstream_rq_total:{value:287948,perSecond:3199.4222222222224}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:2020.887640449438,totalRequests:179859,latency:{max:66.33676700000001,min:.32340800000000003,mean:.550293,pstdev:.861711,percentiles:{p50:.44910300000000003,p75:.540383,p80:.549759,p90:.6192949999999999,p95:.944383,p99:1.894911,p999:8.984063}},resources:{envoyGateway:{memory:{max:159.85546875,min:141.671875,mean:146.059765625},cpu:{max:1.1333333333333449,min:.933333333333337,mean:1.0363636363636408}},envoyProxy:{memory:{max:103.4765625,min:102.9609375,mean:103.1703125},cpu:{max:45.96425033467191,min:45.96425033467191,mean:45.96425033467191}}},poolOverflow:140,upstreamConnections:53,counters:{"benchmark.http_2xx":{value:179859,perSecond:2020.887640449438},"benchmark.pool_overflow":{value:140,perSecond:1.5730337078651686},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:53,perSecond:.5955056179775281},upstream_cx_rx_bytes_total:{value:28237863,perSecond:317279.3595505618},upstream_cx_total:{value:53,perSecond:.5955056179775281},upstream_cx_tx_bytes_total:{value:8093655,perSecond:90939.94382022473},upstream_rq_pending_overflow:{value:140,perSecond:1.5730337078651686},upstream_rq_pending_total:{value:53,perSecond:.5955056179775281},upstream_rq_total:{value:179859,perSecond:2020.887640449438}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1199.6555555555556,totalRequests:107969,latency:{max:29.548543,min:.342528,mean:.49396,pstdev:.46276,percentiles:{p50:.444223,p75:.463871,p80:.46807899999999997,p90:.496095,p95:.548479,p99:1.618303,p999:7.135999}},resources:{envoyGateway:{memory:{max:148.67578125,min:145.35546875,mean:147.05924479166666},cpu:{max:1.066666666666644,min:.8666666666666363,mean:.9666666666666638}},envoyProxy:{memory:{max:103.4765625,min:102.55859375,mean:102.98919270833333},cpu:{max:20.25151466666635,min:20.25151466666635,mean:20.25151466666635}}},poolOverflow:31,upstreamConnections:30,counters:{"benchmark.http_2xx":{value:107969,perSecond:1199.6555555555556},"benchmark.pool_overflow":{value:31,perSecond:.34444444444444444},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:30,perSecond:.3333333333333333},upstream_cx_rx_bytes_total:{value:16951133,perSecond:188345.92222222223},upstream_cx_total:{value:30,perSecond:.3333333333333333},upstream_cx_tx_bytes_total:{value:4858605,perSecond:53984.5},upstream_rq_pending_overflow:{value:31,perSecond:.34444444444444444},upstream_rq_pending_total:{value:30,perSecond:.3333333333333333},upstream_rq_total:{value:107969,perSecond:1199.6555555555556}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:399.9888888888889,totalRequests:35999,latency:{max:30.369791,min:.365792,mean:.49008500000000005,pstdev:.506989,percentiles:{p50:.44926299999999997,p75:.467951,p80:.47259100000000004,p90:.493983,p95:.5300469999999999,p99:1.070783,p999:7.098879}},resources:{envoyGateway:{memory:{max:147.73046875,min:138.51171875,mean:141.698046875},cpu:{max:1.1333333333333446,min:.933333333333337,mean:1.0272727272727271}},envoyProxy:{memory:{max:103.16015625,min:102.6015625,mean:102.71276041666667},cpu:{max:10.248671815326777,min:6.000252904630225,mean:9.154973976397287}}},poolOverflow:1,upstreamConnections:10,counters:{"benchmark.http_2xx":{value:35999,perSecond:399.9888888888889},"benchmark.pool_overflow":{value:1,perSecond:.011111111111111112},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:10,perSecond:.1111111111111111},upstream_cx_rx_bytes_total:{value:5651843,perSecond:62798.25555555556},upstream_cx_total:{value:10,perSecond:.1111111111111111},upstream_cx_tx_bytes_total:{value:1619955,perSecond:17999.5},upstream_rq_pending_overflow:{value:1,perSecond:.011111111111111112},upstream_rq_pending_total:{value:10,perSecond:.1111111111111111},upstream_rq_total:{value:35999,perSecond:399.9888888888889}}}]},Hee={metadata:{version:"1.8.1",runId:"1.8.1-release-2026-06-05",date:"2026-06-05T07:32:33Z",environment:"GitHub Release",description:"Benchmark results for version 1.8.1 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.8.1/benchmark_report.zip",testConfiguration:{connections:100,cpuLimit:"1000m",duration:90,memoryLimit:"2000Mi",rps:100}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:404.40449438202245,totalRequests:35992,latency:{max:109.498367,min:.38012799999999997,mean:.515294,pstdev:.980444,percentiles:{p50:.464495,p75:.48273499999999997,p80:.487215,p90:.503199,p95:.534847,p99:1.253183,p999:10.898431}},resources:{envoyGateway:{memory:{max:131.48046875,min:109.91796875,mean:125.279296875},cpu:{max:.9333333333333335,min:.3333333333333336,mean:.5111111111111112}},envoyProxy:{memory:{max:21.76171875,min:7.1015625,mean:18.87365301724138},cpu:{max:10.554019329822324,min:7.540699450203251,mean:10.166335275663474}}},poolOverflow:8,upstreamConnections:12,counters:{"benchmark.http_2xx":{value:35992,perSecond:404.40449438202245},"benchmark.pool_overflow":{value:8,perSecond:.0898876404494382},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:12,perSecond:.1348314606741573},upstream_cx_rx_bytes_total:{value:5650744,perSecond:63491.50561797753},upstream_cx_total:{value:12,perSecond:.1348314606741573},upstream_cx_tx_bytes_total:{value:1619640,perSecond:18198.20224719101},upstream_rq_pending_overflow:{value:8,perSecond:.0898876404494382},upstream_rq_pending_total:{value:12,perSecond:.1348314606741573},upstream_rq_total:{value:35992,perSecond:404.40449438202245}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1212.9550561797753,totalRequests:107953,latency:{max:83.43961499999999,min:.33288,mean:.49536899999999995,pstdev:.762126,percentiles:{p50:.44383900000000004,p75:.462367,p80:.466623,p90:.485423,p95:.5404150000000001,p99:1.544191,p999:9.935359}},resources:{envoyGateway:{memory:{max:133.84765625,min:127.07421875,mean:131.03697916666667},cpu:{max:.5999999999999991,min:.40000000000000036,mean:.5111111111111107}},envoyProxy:{memory:{max:25.69921875,min:21.16015625,mean:25.233854166666667},cpu:{max:29.37750977835723,min:29.288211204542968,mean:29.352440857053452}}},poolOverflow:47,upstreamConnections:36,counters:{"benchmark.http_2xx":{value:107953,perSecond:1212.9550561797753},"benchmark.pool_overflow":{value:47,perSecond:.5280898876404494},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:36,perSecond:.4044943820224719},upstream_cx_rx_bytes_total:{value:16948621,perSecond:190433.94382022473},upstream_cx_total:{value:36,perSecond:.4044943820224719},upstream_cx_tx_bytes_total:{value:4857885,perSecond:54582.97752808989},upstream_rq_pending_overflow:{value:47,perSecond:.5280898876404494},upstream_rq_pending_total:{value:36,perSecond:.4044943820224719},upstream_rq_total:{value:107953,perSecond:1212.9550561797753}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:2021.4943820224719,totalRequests:179913,latency:{max:45.336574999999996,min:.276032,mean:.5828209999999999,pstdev:.817276,percentiles:{p50:.487327,p75:.549631,p80:.5931190000000001,p90:.738015,p95:.8929269999999999,p99:2.2096630000000004,p999:10.760703}},resources:{envoyGateway:{memory:{max:139.8203125,min:130.8671875,mean:134.37369791666666},cpu:{max:1.7333333333333318,min:.5333333333333339,mean:.8266666666666667}},envoyProxy:{memory:{max:30.21875,min:25.56640625,mean:29.29453125},cpu:{max:43.00184937340304,min:42.62349434320169,mean:42.807061855525625}}},poolOverflow:85,upstreamConnections:76,counters:{"benchmark.http_2xx":{value:179913,perSecond:2021.4943820224719},"benchmark.pool_overflow":{value:85,perSecond:.9550561797752809},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:76,perSecond:.8539325842696629},upstream_cx_rx_bytes_total:{value:28246341,perSecond:317374.6179775281},upstream_cx_total:{value:76,perSecond:.8539325842696629},upstream_cx_tx_bytes_total:{value:8096130,perSecond:90967.75280898876},upstream_rq_pending_overflow:{value:85,perSecond:.9550561797752809},upstream_rq_pending_total:{value:76,perSecond:.8539325842696629},upstream_rq_total:{value:179914,perSecond:2021.5056179775281}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3199.2,totalRequests:287928,latency:{max:40.372223,min:.2696,mean:.760329,pstdev:.8954399999999999,percentiles:{p50:.578367,p75:.648383,p80:.689471,p90:1.035039,p95:1.6718709999999999,p99:3.783935,p999:13.377535}},resources:{envoyGateway:{memory:{max:153.76171875,min:144.046875,mean:150.990234375},cpu:{max:32.06666666666667,min:.6666666666666643,mean:5.988888893629631}},envoyProxy:{memory:{max:46.6875,min:33.8515625,mean:43.86145833333333},cpu:{max:65.97595594217421,min:65.81858578052547,mean:65.89727086134984}}},poolOverflow:72,upstreamConnections:87,counters:{"benchmark.http_2xx":{value:287928,perSecond:3199.2},"benchmark.pool_overflow":{value:72,perSecond:.8},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:87,perSecond:.9666666666666667},upstream_cx_rx_bytes_total:{value:45204696,perSecond:502274.4},upstream_cx_total:{value:87,perSecond:.9666666666666667},upstream_cx_tx_bytes_total:{value:12956760,perSecond:143964},upstream_rq_pending_overflow:{value:72,perSecond:.8},upstream_rq_pending_total:{value:87,perSecond:.9666666666666667},upstream_rq_total:{value:287928,perSecond:3199.2}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:4043.4606741573034,totalRequests:359868,latency:{max:107.41350299999999,min:.253432,mean:1.37783,pstdev:4.171488999999999,percentiles:{p50:.690591,p75:.9181429999999999,p80:1.038527,p90:2.045887,p95:3.422079,p99:12.497919,p999:66.467839}},resources:{envoyGateway:{memory:{max:161.8359375,min:146.98046875,mean:160.31276041666666},cpu:{max:49.13333333333334,min:.86666666666666,mean:9.222988505747129}},envoyProxy:{memory:{max:70.37890625,min:48.23046875,mean:62.147526041666666},cpu:{max:76.39781104541453,min:75.68597611597177,mean:75.94452978166471}}},poolOverflow:119,upstreamConnections:281,counters:{"benchmark.http_2xx":{value:359868,perSecond:4043.4606741573034},"benchmark.pool_overflow":{value:119,perSecond:1.3370786516853932},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:281,perSecond:3.157303370786517},upstream_cx_rx_bytes_total:{value:56499276,perSecond:634823.3258426966},upstream_cx_total:{value:281,perSecond:3.157303370786517},upstream_cx_tx_bytes_total:{value:16194600,perSecond:181961.79775280898},upstream_rq_pending_overflow:{value:119,perSecond:1.3370786516853932},upstream_rq_pending_total:{value:281,perSecond:3.157303370786517},upstream_rq_total:{value:359880,perSecond:4043.5955056179773}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:6508.044444444445,totalRequests:585724,latency:{max:705.036287,min:1.559616,mean:45.79942,pstdev:13.919675,percentiles:{p50:44.763135000000005,p75:52.000767,p80:53.450751,p90:57.329663000000004,p95:61.442047,p99:87.625727,p999:156.680191}},resources:{envoyGateway:{memory:{max:189.63671875,min:175.828125,mean:182.88255208333334},cpu:{max:96.26666666666665,min:.8666666666666363,mean:15.506662238222047}},envoyProxy:{memory:{max:105.33203125,min:89.0859375,mean:100.22604166666666},cpu:{max:98.10031793745301,min:98.100317937453,mean:98.100317937453}}},poolOverflow:99,upstreamConnections:301,counters:{"benchmark.http_2xx":{value:585724,perSecond:6508.044444444445},"benchmark.pool_overflow":{value:99,perSecond:1.1},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:301,perSecond:3.3444444444444446},upstream_cx_rx_bytes_total:{value:91958668,perSecond:1.0217629777777778e6},upstream_cx_total:{value:301,perSecond:3.3444444444444446},upstream_cx_tx_bytes_total:{value:26370360,perSecond:293004},upstream_rq_pending_overflow:{value:99,perSecond:1.1},upstream_rq_pending_total:{value:301,perSecond:3.3444444444444446},upstream_rq_total:{value:586008,perSecond:6511.2}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3999.0555555555557,totalRequests:359915,latency:{max:141.844479,min:.262272,mean:1.5387339999999998,pstdev:4.385846,percentiles:{p50:.648831,p75:.982335,p80:1.1812470000000002,p90:2.536063,p95:4.634111,p99:18.376703000000003,p999:65.419263}},resources:{envoyGateway:{memory:{max:185.24609375,min:163.96875,mean:170.17838541666666},cpu:{max:1.3333333333333524,min:1.0000000000000377,mean:1.1199573418649655}},envoyProxy:{memory:{max:104.74609375,min:103.33203125,mean:104.26653645833333},cpu:{max:78.74553133975333,min:54.886713963210774,mean:66.81612265148205}}},poolOverflow:81,upstreamConnections:296,counters:{"benchmark.http_2xx":{value:359915,perSecond:3999.0555555555557},"benchmark.pool_overflow":{value:81,perSecond:.9},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:296,perSecond:3.2888888888888888},upstream_cx_rx_bytes_total:{value:56506655,perSecond:627851.7222222222},upstream_cx_total:{value:296,perSecond:3.2888888888888888},upstream_cx_tx_bytes_total:{value:16196355,perSecond:179959.5},upstream_rq_pending_overflow:{value:81,perSecond:.9},upstream_rq_pending_total:{value:296,perSecond:3.2888888888888888},upstream_rq_total:{value:359919,perSecond:3999.1}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3199.4555555555557,totalRequests:287951,latency:{max:55.562239,min:.27488,mean:1.172193,pstdev:1.6265640000000001,percentiles:{p50:.603935,p75:1.207871,p80:1.733567,p90:2.645375,p95:3.0668789999999997,p99:6.285823000000001,p999:20.894719}},resources:{envoyGateway:{memory:{max:160.8046875,min:149.265625,mean:154.90598958333334},cpu:{max:1.266244585138272,min:.9336445481827313,mean:1.096944499997193}},envoyProxy:{memory:{max:104.10546875,min:103.3125,mean:103.80494791666666},cpu:{max:66.13249527856466,min:64.65317981276254,mean:65.46358015461453}}},poolOverflow:48,upstreamConnections:123,counters:{"benchmark.http_2xx":{value:287951,perSecond:3199.4555555555557},"benchmark.pool_overflow":{value:48,perSecond:.5333333333333333},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:123,perSecond:1.3666666666666667},upstream_cx_rx_bytes_total:{value:45208307,perSecond:502314.52222222224},upstream_cx_total:{value:123,perSecond:1.3666666666666667},upstream_cx_tx_bytes_total:{value:12957840,perSecond:143976},upstream_rq_pending_overflow:{value:48,perSecond:.5333333333333333},upstream_rq_pending_total:{value:123,perSecond:1.3666666666666667},upstream_rq_total:{value:287952,perSecond:3199.4666666666667}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:2021.2808988764045,totalRequests:179894,latency:{max:63.080447,min:.27105599999999996,mean:.6560739999999999,pstdev:1.06362,percentiles:{p50:.548959,p75:.6565749999999999,p80:.690783,p90:.823327,p95:.9779190000000001,p99:2.508799,p999:17.105919}},resources:{envoyGateway:{memory:{max:162.5546875,min:146.77734375,mean:151.49283854166666},cpu:{max:1.066666666666644,min:.933333333333337,mean:1.0166666666666657}},envoyProxy:{memory:{max:103.87109375,min:103.01953125,mean:103.50442708333334},cpu:{max:41.79160047230567,min:21.789793713683935,mean:31.509512905644222}}},poolOverflow:104,upstreamConnections:66,counters:{"benchmark.http_2xx":{value:179894,perSecond:2021.2808988764045},"benchmark.pool_overflow":{value:104,perSecond:1.1685393258426966},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:66,perSecond:.7415730337078652},upstream_cx_rx_bytes_total:{value:28243358,perSecond:317341.1011235955},upstream_cx_total:{value:66,perSecond:.7415730337078652},upstream_cx_tx_bytes_total:{value:8095230,perSecond:90957.6404494382},upstream_rq_pending_overflow:{value:104,perSecond:1.1685393258426966},upstream_rq_pending_total:{value:66,perSecond:.7415730337078652},upstream_rq_total:{value:179894,perSecond:2021.2808988764045}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1198.9222222222222,totalRequests:107903,latency:{max:97.869823,min:.34808,mean:.5089359999999999,pstdev:1.073334,percentiles:{p50:.442463,p75:.462575,p80:.467695,p90:.486479,p95:.5455990000000001,p99:1.8232949999999999,p999:10.969599}},resources:{envoyGateway:{memory:{max:150.85546875,min:142.01953125,mean:144.434375},cpu:{max:1.1999999999999507,min:.933333333333337,mean:1.0606060606060561}},envoyProxy:{memory:{max:103.63671875,min:103.2734375,mean:103.49453125},cpu:{max:29.558607972838676,min:19.90093760440843,mean:27.73225719409582}}},poolOverflow:97,upstreamConnections:42,counters:{"benchmark.http_2xx":{value:107903,perSecond:1198.9222222222222},"benchmark.pool_overflow":{value:97,perSecond:1.0777777777777777},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:42,perSecond:.4666666666666667},upstream_cx_rx_bytes_total:{value:16940771,perSecond:188230.7888888889},upstream_cx_total:{value:42,perSecond:.4666666666666667},upstream_cx_tx_bytes_total:{value:4855635,perSecond:53951.5},upstream_rq_pending_overflow:{value:97,perSecond:1.0777777777777777},upstream_rq_pending_total:{value:42,perSecond:.4666666666666667},upstream_rq_total:{value:107903,perSecond:1198.9222222222222}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:404.39325842696627,totalRequests:35991,latency:{max:27.911167,min:.371904,mean:.497451,pstdev:.427144,percentiles:{p50:.466335,p75:.482623,p80:.486383,p90:.49972700000000003,p95:.530815,p99:1.201855,p999:5.028607}},resources:{envoyGateway:{memory:{max:145.3046875,min:141.98046875,mean:143.59661458333332},cpu:{max:1.1999999999999507,min:.933333333333337,mean:1.03055555555555}},envoyProxy:{memory:{max:103.58203125,min:103.0703125,mean:103.26497395833333},cpu:{max:10.618555732253945,min:5.543974256020859,mean:9.807505359943042}}},poolOverflow:9,upstreamConnections:13,counters:{"benchmark.http_2xx":{value:35991,perSecond:404.39325842696627},"benchmark.pool_overflow":{value:9,perSecond:.10112359550561797},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:13,perSecond:.14606741573033707},upstream_cx_rx_bytes_total:{value:5650587,perSecond:63489.74157303371},upstream_cx_total:{value:13,perSecond:.14606741573033707},upstream_cx_tx_bytes_total:{value:1619595,perSecond:18197.696629213482},upstream_rq_pending_overflow:{value:9,perSecond:.10112359550561797},upstream_rq_pending_total:{value:13,perSecond:.14606741573033707},upstream_rq_total:{value:35991,perSecond:404.39325842696627}}}]},Gee={metadata:{version:"1.7.4",runId:"1.7.4-release-2026-06-05",date:"2026-06-05T07:55:33Z",environment:"GitHub Release",description:"Benchmark results for version 1.7.4 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.7.4/benchmark_report.zip",testConfiguration:{connections:100,cpuLimit:"1000m",duration:90,memoryLimit:"2000Mi",rps:100}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:399.9888888888889,totalRequests:35999,latency:{max:33.251326999999996,min:.308688,mean:.426933,pstdev:.39075,percentiles:{p50:.399887,p75:.423567,p80:.43081499999999995,p90:.453743,p95:.482719,p99:.888159,p999:4.870911}},resources:{envoyGateway:{memory:{max:137.75,min:119.390625,mean:135.84114583333334},cpu:{max:1.2000000000000004,min:.26666666666666694,mean:.523809523809524}},envoyProxy:{memory:{max:24.57421875,min:6.71484375,mean:22.530598958333332},cpu:{max:9.426398721169218,min:5.449132527399091,mean:8.087672764585205}}},poolOverflow:1,upstreamConnections:9,counters:{"benchmark.http_2xx":{value:35999,perSecond:399.9888888888889},"benchmark.pool_overflow":{value:1,perSecond:.011111111111111112},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:9,perSecond:.1},upstream_cx_rx_bytes_total:{value:5651843,perSecond:62798.25555555556},upstream_cx_total:{value:9,perSecond:.1},upstream_cx_tx_bytes_total:{value:1619955,perSecond:17999.5},upstream_rq_pending_overflow:{value:1,perSecond:.011111111111111112},upstream_rq_pending_total:{value:9,perSecond:.1},upstream_rq_total:{value:35999,perSecond:399.9888888888889}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1213,totalRequests:107957,latency:{max:83.54201499999999,min:.27854399999999996,mean:.416908,pstdev:.76607,percentiles:{p50:.386223,p75:.40463899999999997,p80:.410015,p90:.427055,p95:.457007,p99:1.030719,p999:4.182271}},resources:{envoyGateway:{memory:{max:143.77734375,min:138.45703125,mean:140.41380208333334},cpu:{max:1.866666666666667,min:.40000000000000036,mean:.7466666666666664}},envoyProxy:{memory:{max:30.94140625,min:28.3046875,mean:30.134635416666665},cpu:{max:25.687688289072725,min:15.110782636047029,mean:23.981684291342074}}},poolOverflow:43,upstreamConnections:29,counters:{"benchmark.http_2xx":{value:107957,perSecond:1213},"benchmark.pool_overflow":{value:43,perSecond:.48314606741573035},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:29,perSecond:.3258426966292135},upstream_cx_rx_bytes_total:{value:16949249,perSecond:190441},upstream_cx_total:{value:29,perSecond:.3258426966292135},upstream_cx_tx_bytes_total:{value:4858065,perSecond:54585},upstream_rq_pending_overflow:{value:43,perSecond:.48314606741573035},upstream_rq_pending_total:{value:29,perSecond:.3258426966292135},upstream_rq_total:{value:107957,perSecond:1213}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:2021.9325842696628,totalRequests:179952,latency:{max:39.815166999999995,min:.25008,mean:.393862,pstdev:.291014,percentiles:{p50:.359743,p75:.403711,p80:.416543,p90:.460687,p95:.544991,p99:.997439,p999:3.0465269999999998}},resources:{envoyGateway:{memory:{max:146.54296875,min:138.87109375,mean:144.67838541666666},cpu:{max:2.2666666666666657,min:.4666666666666685,mean:.8977777777777782}},envoyProxy:{memory:{max:36.9375,min:36.58203125,mean:36.77981770833333},cpu:{max:36.94134174742694,min:26.86066527358325,mean:35.05044941527442}}},poolOverflow:48,upstreamConnections:27,counters:{"benchmark.http_2xx":{value:179952,perSecond:2021.9325842696628},"benchmark.pool_overflow":{value:48,perSecond:.5393258426966292},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:27,perSecond:.30337078651685395},upstream_cx_rx_bytes_total:{value:28252464,perSecond:317443.4157303371},upstream_cx_total:{value:27,perSecond:.30337078651685395},upstream_cx_tx_bytes_total:{value:8097840,perSecond:90986.96629213484},upstream_rq_pending_overflow:{value:48,perSecond:.5393258426966292},upstream_rq_pending_total:{value:27,perSecond:.30337078651685395},upstream_rq_total:{value:179952,perSecond:2021.9325842696628}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3199.588888888889,totalRequests:287963,latency:{max:74.407935,min:.2362,mean:.636105,pstdev:2.963721,percentiles:{p50:.33427100000000004,p75:.424143,p80:.44676699999999997,p90:.550239,p95:.731583,p99:3.988735,p999:51.693567}},resources:{envoyGateway:{memory:{max:152.87109375,min:146.68359375,mean:150.56302083333333},cpu:{max:4.800000000000004,min:.5333333333333339,mean:1.4555555555555566}},envoyProxy:{memory:{max:68.76953125,min:56.9609375,mean:63.75859375},cpu:{max:58.60384001418934,min:34.71300790173815,mean:53.306176495585646}}},poolOverflow:37,upstreamConnections:226,counters:{"benchmark.http_2xx":{value:287963,perSecond:3199.588888888889},"benchmark.pool_overflow":{value:37,perSecond:.4111111111111111},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:226,perSecond:2.511111111111111},upstream_cx_rx_bytes_total:{value:45210191,perSecond:502335.4555555555},upstream_cx_total:{value:226,perSecond:2.511111111111111},upstream_cx_tx_bytes_total:{value:12958335,perSecond:143981.5},upstream_rq_pending_overflow:{value:37,perSecond:.4111111111111111},upstream_rq_pending_total:{value:226,perSecond:2.511111111111111},upstream_rq_total:{value:287963,perSecond:3199.588888888889}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3999.266666666667,totalRequests:359934,latency:{max:191.356927,min:.21468,mean:1.664008,pstdev:8.160039,percentiles:{p50:.45743900000000004,p75:.523199,p80:.564031,p90:.905023,p95:1.908159,p99:47.011839,p999:96.559103}},resources:{envoyGateway:{memory:{max:174.10546875,min:161.8203125,mean:169.17161458333334},cpu:{max:7.266666666666666,min:.6666666666666762,mean:1.8755555555555554}},envoyProxy:{memory:{max:93.60546875,min:83.7734375,mean:90.74986979166667},cpu:{max:66.83496625843536,min:34.83865624987582,mean:54.83174977413697}}},poolOverflow:66,upstreamConnections:334,counters:{"benchmark.http_2xx":{value:359934,perSecond:3999.266666666667},"benchmark.pool_overflow":{value:66,perSecond:.7333333333333333},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:334,perSecond:3.7111111111111112},upstream_cx_rx_bytes_total:{value:56509638,perSecond:627884.8666666667},upstream_cx_total:{value:334,perSecond:3.7111111111111112},upstream_cx_tx_bytes_total:{value:16197030,perSecond:179967},upstream_rq_pending_overflow:{value:66,perSecond:.7333333333333333},upstream_rq_pending_total:{value:334,perSecond:3.7111111111111112},upstream_rq_total:{value:359934,perSecond:3999.266666666667}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:7976.5,totalRequests:717885,latency:{max:233.98809500000002,min:.229776,mean:14.102452999999999,pstdev:15.460493000000001,percentiles:{p50:3.779839,p75:25.521151,p80:27.223039,p90:31.238143,p95:35.014655,p99:77.422591,p999:90.357759}},resources:{envoyGateway:{memory:{max:192.08984375,min:174.54296875,mean:186.37473958333334},cpu:{max:13.133333333333324,min:.8000000000000304,mean:2.880000000000004}},envoyProxy:{memory:{max:143.33984375,min:138.078125,mean:141.55286458333333},cpu:{max:98.90207227264949,min:62.16400644335651,mean:90.35971139102087}}},poolOverflow:150,upstreamConnections:250,counters:{"benchmark.http_2xx":{value:717885,perSecond:7976.5},"benchmark.pool_overflow":{value:150,perSecond:1.6666666666666667},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:250,perSecond:2.7777777777777777},upstream_cx_rx_bytes_total:{value:112707945,perSecond:12523105e-1},upstream_cx_total:{value:250,perSecond:2.7777777777777777},upstream_cx_tx_bytes_total:{value:32315175,perSecond:359057.5},upstream_rq_pending_overflow:{value:150,perSecond:1.6666666666666667},upstream_rq_pending_total:{value:250,perSecond:2.7777777777777777},upstream_rq_total:{value:718115,perSecond:7979.055555555556}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3999.488888888889,totalRequests:359954,latency:{max:233.693183,min:.231872,mean:1.694018,pstdev:8.011149,percentiles:{p50:.461503,p75:.522703,p80:.558111,p90:.840639,p95:1.9069429999999998,p99:48.564223,p999:89.624575}},resources:{envoyGateway:{memory:{max:173.07421875,min:167.5703125,mean:171.127734375},cpu:{max:1.1333333333333446,min:.9999999999999432,mean:1.0515151515151429}},envoyProxy:{memory:{max:143.82421875,min:142.14453125,mean:143.23541666666668},cpu:{max:67.09508363517963,min:67.09508363517963,mean:67.09508363517963}}},poolOverflow:46,upstreamConnections:354,counters:{"benchmark.http_2xx":{value:359954,perSecond:3999.488888888889},"benchmark.pool_overflow":{value:46,perSecond:.5111111111111111},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:354,perSecond:3.933333333333333},upstream_cx_rx_bytes_total:{value:56512778,perSecond:627919.7555555556},upstream_cx_total:{value:354,perSecond:3.933333333333333},upstream_cx_tx_bytes_total:{value:16197930,perSecond:179977},upstream_rq_pending_overflow:{value:46,perSecond:.5111111111111111},upstream_rq_pending_total:{value:354,perSecond:3.933333333333333},upstream_rq_total:{value:359954,perSecond:3999.488888888889}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3199.5,totalRequests:287955,latency:{max:122.720255,min:.235768,mean:.640906,pstdev:3.1200669999999997,percentiles:{p50:.32247899999999996,p75:.366303,p80:.417903,p90:.529279,p95:.753823,p99:5.074687,p999:50.528255}},resources:{envoyGateway:{memory:{max:178.47265625,min:161.37890625,mean:164.63216145833334},cpu:{max:2.6000000000000036,min:.9999999999999432,mean:1.333333333333333}},envoyProxy:{memory:{max:143.71484375,min:133.97265625,mean:136.52604166666666},cpu:{max:56.556327110947876,min:34.234786377497414,mean:51.36810909110853}}},poolOverflow:41,upstreamConnections:197,counters:{"benchmark.http_2xx":{value:287955,perSecond:3199.5},"benchmark.pool_overflow":{value:41,perSecond:.45555555555555555},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:197,perSecond:2.188888888888889},upstream_cx_rx_bytes_total:{value:45208935,perSecond:502321.5},upstream_cx_total:{value:197,perSecond:2.188888888888889},upstream_cx_tx_bytes_total:{value:12958155,perSecond:143979.5},upstream_rq_pending_overflow:{value:41,perSecond:.45555555555555555},upstream_rq_pending_total:{value:197,perSecond:2.188888888888889},upstream_rq_total:{value:287959,perSecond:3199.5444444444443}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:1999.4,totalRequests:179946,latency:{max:40.019966999999994,min:.255168,mean:.386061,pstdev:.370692,percentiles:{p50:.361807,p75:.379759,p80:.384175,p90:.398287,p95:.428847,p99:1.0680310000000002,p999:4.079359}},resources:{envoyGateway:{memory:{max:158.55078125,min:151.36328125,mean:153.33072916666666},cpu:{max:1.1333333333333446,min:.933333333333337,mean:.9848484848484845}},envoyProxy:{memory:{max:134.265625,min:133.7421875,mean:133.99661458333333},cpu:{max:39.644203192640646,min:22.70835085046973,mean:36.96250951395476}}},poolOverflow:54,upstreamConnections:36,counters:{"benchmark.http_2xx":{value:179946,perSecond:1999.4},"benchmark.pool_overflow":{value:54,perSecond:.6},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:36,perSecond:.4},upstream_cx_rx_bytes_total:{value:28251522,perSecond:313905.8},upstream_cx_total:{value:36,perSecond:.4},upstream_cx_tx_bytes_total:{value:8097570,perSecond:89973},upstream_rq_pending_overflow:{value:54,perSecond:.6},upstream_rq_pending_total:{value:36,perSecond:.4},upstream_rq_total:{value:179946,perSecond:1999.4}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1212.7640449438202,totalRequests:107936,latency:{max:56.717311,min:.26424000000000003,mean:.40393999999999997,pstdev:.624905,percentiles:{p50:.375199,p75:.391215,p80:.395695,p90:.411343,p95:.434719,p99:1.033279,p999:4.856318999999999}},resources:{envoyGateway:{memory:{max:153.9609375,min:148.01171875,mean:149.52682291666667},cpu:{max:1.1999999999999509,min:.8666666666666363,mean:.9888888888888814}},envoyProxy:{memory:{max:134.21875,min:133.6484375,mean:133.89127604166666},cpu:{max:0,min:0,mean:0}}},poolOverflow:64,upstreamConnections:29,counters:{"benchmark.http_2xx":{value:107936,perSecond:1212.7640449438202},"benchmark.pool_overflow":{value:64,perSecond:.7191011235955056},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:29,perSecond:.3258426966292135},upstream_cx_rx_bytes_total:{value:16945952,perSecond:190403.95505617978},upstream_cx_total:{value:29,perSecond:.3258426966292135},upstream_cx_tx_bytes_total:{value:4857120,perSecond:54574.38202247191},upstream_rq_pending_overflow:{value:64,perSecond:.7191011235955056},upstream_rq_pending_total:{value:29,perSecond:.3258426966292135},upstream_rq_total:{value:107936,perSecond:1212.7640449438202}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:404.438202247191,totalRequests:35995,latency:{max:48.982015,min:.316272,mean:.47786,pstdev:.880794,percentiles:{p50:.428367,p75:.45654300000000003,p80:.47054300000000004,p90:.496687,p95:.526687,p99:1.1299190000000001,p999:8.804863}},resources:{envoyGateway:{memory:{max:148.640625,min:143.78125,mean:145.92122395833334},cpu:{max:1.1333333333333446,min:.933333333333337,mean:1.0222222222222215}},envoyProxy:{memory:{max:134.15234375,min:133.6875,mean:133.94466145833334},cpu:{max:9.708975160130983,min:6.287532313700823,mean:8.870891522527844}}},poolOverflow:5,upstreamConnections:16,counters:{"benchmark.http_2xx":{value:35995,perSecond:404.438202247191},"benchmark.pool_overflow":{value:5,perSecond:.056179775280898875},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:16,perSecond:.1797752808988764},upstream_cx_rx_bytes_total:{value:5651215,perSecond:63496.79775280899},upstream_cx_total:{value:16,perSecond:.1797752808988764},upstream_cx_tx_bytes_total:{value:1619775,perSecond:18199.719101123595},upstream_rq_pending_overflow:{value:5,perSecond:.056179775280898875},upstream_rq_pending_total:{value:16,perSecond:.1797752808988764},upstream_rq_total:{value:35995,perSecond:404.438202247191}}}]},Fee={metadata:{version:"1.8.2",runId:"1.8.2-release-2026-07-01",date:"2026-07-01T07:14:42Z",environment:"GitHub Release",description:"Benchmark results for version 1.8.2 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.8.2/benchmark_report.zip",testConfiguration:{connections:100,cpuLimit:"1000m",duration:90,memoryLimit:"2000Mi",rps:100}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:404.4269662921348,totalRequests:35994,latency:{max:36.020222999999994,min:.312,mean:.41179699999999997,pstdev:.449004,percentiles:{p50:.380687,p75:.39697499999999997,p80:.40220700000000004,p90:.422943,p95:.457727,p99:.942815,p999:5.765119}},resources:{envoyGateway:{memory:{max:132.5859375,min:106.25390625,mean:125.273828125},cpu:{max:.8,min:.26666666666666655,mean:.4357142857142859}},envoyProxy:{memory:{max:20.3125,min:7.51171875,mean:17.907462284482758},cpu:{max:8.761964562188197,min:5.422322740352064,mean:7.468832454853503}}},poolOverflow:6,upstreamConnections:11,counters:{"benchmark.http_2xx":{value:35994,perSecond:404.4269662921348},"benchmark.pool_overflow":{value:6,perSecond:.06741573033707865},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:11,perSecond:.12359550561797752},upstream_cx_rx_bytes_total:{value:5651058,perSecond:63495.03370786517},upstream_cx_total:{value:11,perSecond:.12359550561797752},upstream_cx_tx_bytes_total:{value:1619730,perSecond:18199.213483146068},upstream_rq_pending_overflow:{value:6,perSecond:.06741573033707865},upstream_rq_pending_total:{value:11,perSecond:.12359550561797752},upstream_rq_total:{value:35994,perSecond:404.4269662921348}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1199.4333333333334,totalRequests:107949,latency:{max:64.907263,min:.27233599999999997,mean:.38906599999999997,pstdev:.7291580000000001,percentiles:{p50:.351375,p75:.366735,p80:.371327,p90:.38687900000000003,p95:.417103,p99:1.061375,p999:6.537727}},resources:{envoyGateway:{memory:{max:136.16796875,min:129.78125,mean:133.76419270833333},cpu:{max:.46666666666666706,min:.40000000000000036,mean:.4515151515151514}},envoyProxy:{memory:{max:24.875,min:20.3046875,mean:24.182291666666668},cpu:{max:23.617121248692584,min:15.34443729396305,mean:21.76731003192191}}},poolOverflow:51,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:107949,perSecond:1199.4333333333334},"benchmark.pool_overflow":{value:51,perSecond:.5666666666666667},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:37,perSecond:.4111111111111111},upstream_cx_rx_bytes_total:{value:16947993,perSecond:188311.03333333333},upstream_cx_total:{value:37,perSecond:.4111111111111111},upstream_cx_tx_bytes_total:{value:4857705,perSecond:53974.5},upstream_rq_pending_overflow:{value:51,perSecond:.5666666666666667},upstream_rq_pending_total:{value:37,perSecond:.4111111111111111},upstream_rq_total:{value:107949,perSecond:1199.4333333333334}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:2021.5168539325844,totalRequests:179915,latency:{max:127.25452700000001,min:.263232,mean:.378263,pstdev:1.1435600000000001,percentiles:{p50:.332655,p75:.354879,p80:.360607,p90:.377151,p95:.422591,p99:1.157119,p999:4.588799}},resources:{envoyGateway:{memory:{max:137.95703125,min:128.9453125,mean:134.10416666666666},cpu:{max:4.800000000000002,min:.3999999999999974,mean:1.335897435897436}},envoyProxy:{memory:{max:28.83984375,min:24.78515625,mean:27.861458333333335},cpu:{max:36.54449081803006,min:35.403415543690116,mean:36.08806070829409}}},poolOverflow:85,upstreamConnections:42,counters:{"benchmark.http_2xx":{value:179915,perSecond:2021.5168539325844},"benchmark.pool_overflow":{value:85,perSecond:.9550561797752809},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:42,perSecond:.47191011235955055},upstream_cx_rx_bytes_total:{value:28246655,perSecond:317378.1460674157},upstream_cx_total:{value:42,perSecond:.47191011235955055},upstream_cx_tx_bytes_total:{value:8096175,perSecond:90968.25842696629},upstream_rq_pending_overflow:{value:85,perSecond:.9550561797752809},upstream_rq_pending_total:{value:42,perSecond:.47191011235955055},upstream_rq_total:{value:179915,perSecond:2021.5168539325844}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3199.233333333333,totalRequests:287931,latency:{max:44.654591,min:.227192,mean:.416971,pstdev:.692846,percentiles:{p50:.325727,p75:.35556699999999997,p80:.37772700000000003,p90:.482255,p95:.652991,p99:2.004095,p999:9.937918999999999}},resources:{envoyGateway:{memory:{max:152.89453125,min:142.5703125,mean:148.78268229166667},cpu:{max:23.06666666666667,min:.5999999999999991,mean:4.562222222222224}},envoyProxy:{memory:{max:45.5,min:28.19921875,mean:40.841796875},cpu:{max:56.956964607078575,min:55.81466109688724,mean:56.115334620281175}}},poolOverflow:69,upstreamConnections:91,counters:{"benchmark.http_2xx":{value:287931,perSecond:3199.233333333333},"benchmark.pool_overflow":{value:69,perSecond:.7666666666666667},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:91,perSecond:1.011111111111111},upstream_cx_rx_bytes_total:{value:45205167,perSecond:502279.63333333336},upstream_cx_total:{value:91,perSecond:1.011111111111111},upstream_cx_tx_bytes_total:{value:12956895,perSecond:143965.5},upstream_rq_pending_overflow:{value:69,perSecond:.7666666666666667},upstream_rq_pending_total:{value:91,perSecond:1.011111111111111},upstream_rq_total:{value:287931,perSecond:3199.233333333333}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3998.511111111111,totalRequests:359866,latency:{max:107.909119,min:.213488,mean:.846032,pstdev:3.164183,percentiles:{p50:.46446299999999996,p75:.518143,p80:.548575,p90:.7605430000000001,p95:1.322303,p99:9.396735,p999:49.727487}},resources:{envoyGateway:{memory:{max:169,min:151.01953125,mean:165.20091145833334},cpu:{max:32.93333333333333,min:.5999999999999991,mean:6.317777777777774}},envoyProxy:{memory:{max:64.9921875,min:44.9375,mean:58.34322916666667},cpu:{max:67.03195836840888,min:46.42560149423007,mean:63.367608419813365}}},poolOverflow:134,upstreamConnections:253,counters:{"benchmark.http_2xx":{value:359866,perSecond:3998.511111111111},"benchmark.pool_overflow":{value:134,perSecond:1.488888888888889},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:253,perSecond:2.811111111111111},upstream_cx_rx_bytes_total:{value:56498962,perSecond:627766.2444444444},upstream_cx_total:{value:253,perSecond:2.811111111111111},upstream_cx_tx_bytes_total:{value:16193970,perSecond:179933},upstream_rq_pending_overflow:{value:134,perSecond:1.488888888888889},upstream_rq_pending_total:{value:253,perSecond:2.811111111111111},upstream_rq_total:{value:359866,perSecond:3998.511111111111}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:7443.9111111111115,totalRequests:669952,latency:{max:584.450047,min:.286336,mean:42.145749,pstdev:11.921429000000002,percentiles:{p50:41.594879,p75:48.228351,p80:50.016255,p90:54.749183,p95:59.179007,p99:74.428415,p999:106.749951}},resources:{envoyGateway:{memory:{max:188.53125,min:166.06640625,mean:183.54153645833333},cpu:{max:67.19999999999999,min:.7333333333333295,mean:13.73333333333333}},envoyProxy:{memory:{max:102.2421875,min:91.796875,mean:98.63997395833333},cpu:{max:99.32751039159913,min:98.86982770503084,mean:99.02721402466419}}},poolOverflow:77,upstreamConnections:323,counters:{"benchmark.http_2xx":{value:669952,perSecond:7443.9111111111115},"benchmark.pool_overflow":{value:77,perSecond:.8555555555555555},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:323,perSecond:3.588888888888889},upstream_cx_rx_bytes_total:{value:105182464,perSecond:1.1686940444444444e6},upstream_cx_total:{value:323,perSecond:3.588888888888889},upstream_cx_tx_bytes_total:{value:30162375,perSecond:335137.5},upstream_rq_pending_overflow:{value:77,perSecond:.8555555555555555},upstream_rq_pending_total:{value:323,perSecond:3.588888888888889},upstream_rq_total:{value:670275,perSecond:7447.5}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3999.511111111111,totalRequests:359956,latency:{max:69.97196699999999,min:.222976,mean:.789628,pstdev:2.5729770000000003,percentiles:{p50:.466191,p75:.525215,p80:.568799,p90:.8516469999999999,p95:1.4764789999999999,p99:6.115327000000001,p999:45.881343}},resources:{envoyGateway:{memory:{max:169.31640625,min:165.83984375,mean:167.48033854166667},cpu:{max:.9333333333333372,min:.8666666666666363,mean:.904347826086966}},envoyProxy:{memory:{max:102.65625,min:100.359375,mean:101.98138020833333},cpu:{max:67.3141865613595,min:47.342977440931314,mean:65.13734998065154}}},poolOverflow:44,upstreamConnections:258,counters:{"benchmark.http_2xx":{value:359956,perSecond:3999.511111111111},"benchmark.pool_overflow":{value:44,perSecond:.4888888888888889},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:258,perSecond:2.8666666666666667},upstream_cx_rx_bytes_total:{value:56513092,perSecond:627923.2444444444},upstream_cx_total:{value:258,perSecond:2.8666666666666667},upstream_cx_tx_bytes_total:{value:16198020,perSecond:179978},upstream_rq_pending_overflow:{value:44,perSecond:.4888888888888889},upstream_rq_pending_total:{value:258,perSecond:2.8666666666666667},upstream_rq_total:{value:359956,perSecond:3999.511111111111}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3233.7303370786517,totalRequests:287802,latency:{max:67.01670299999999,min:.201728,mean:.495236,pstdev:.942877,percentiles:{p50:.378687,p75:.482031,p80:.506575,p90:.632319,p95:.808319,p99:2.2458869999999997,p999:12.598783000000001}},resources:{envoyGateway:{memory:{max:169.31640625,min:151.1328125,mean:157.56510416666666},cpu:{max:1.066666666666644,min:.8666666666666363,mean:.9333333333333373}},envoyProxy:{memory:{max:102.3828125,min:101.3515625,mean:101.960546875},cpu:{max:54.84321253527425,min:39.7540166597358,mean:53.0728229770368}}},poolOverflow:197,upstreamConnections:87,counters:{"benchmark.http_2xx":{value:287802,perSecond:3233.7303370786517},"benchmark.pool_overflow":{value:197,perSecond:2.2134831460674156},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:87,perSecond:.9775280898876404},upstream_cx_rx_bytes_total:{value:45184914,perSecond:507695.6629213483},upstream_cx_total:{value:87,perSecond:.9775280898876404},upstream_cx_tx_bytes_total:{value:12951090,perSecond:145517.8651685393},upstream_rq_pending_overflow:{value:197,perSecond:2.2134831460674156},upstream_rq_pending_total:{value:87,perSecond:.9775280898876404},upstream_rq_total:{value:287802,perSecond:3233.7303370786517}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:2021.0337078651685,totalRequests:179872,latency:{max:159.129599,min:.248888,mean:.388351,pstdev:1.219139,percentiles:{p50:.338255,p75:.358415,p80:.363711,p90:.382207,p95:.437503,p99:1.319487,p999:6.5948150000000005}},resources:{envoyGateway:{memory:{max:155.79296875,min:137.40234375,mean:145.04557291666666},cpu:{max:.933333333333337,min:.8000000000000304,mean:.8666666666666759}},envoyProxy:{memory:{max:101.8828125,min:101.41015625,mean:101.60481770833333},cpu:{max:22.885429953798287,min:22.885429953798287,mean:22.885429953798287}}},poolOverflow:128,upstreamConnections:42,counters:{"benchmark.http_2xx":{value:179872,perSecond:2021.0337078651685},"benchmark.pool_overflow":{value:128,perSecond:1.4382022471910112},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:42,perSecond:.47191011235955055},upstream_cx_rx_bytes_total:{value:28239904,perSecond:317302.2921348315},upstream_cx_total:{value:42,perSecond:.47191011235955055},upstream_cx_tx_bytes_total:{value:8094240,perSecond:90946.51685393258},upstream_rq_pending_overflow:{value:128,perSecond:1.4382022471910112},upstream_rq_pending_total:{value:42,perSecond:.47191011235955055},upstream_rq_total:{value:179872,perSecond:2021.0337078651685}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1213.3820224719102,totalRequests:107991,latency:{max:19.398655,min:.266,mean:.371821,pstdev:.225718,percentiles:{p50:.35195099999999996,p75:.366655,p80:.37027099999999996,p90:.382367,p95:.409743,p99:.9092790000000001,p999:3.3223670000000003}},resources:{envoyGateway:{memory:{max:150.1171875,min:142.828125,mean:145.550390625},cpu:{max:.8666666666666363,min:.7333333333333295,mean:.8285714285714285}},envoyProxy:{memory:{max:102.02734375,min:101.15625,mean:101.46640625},cpu:{max:23.23340219877513,min:23.14379762476824,mean:23.21548128397375}}},poolOverflow:9,upstreamConnections:21,counters:{"benchmark.http_2xx":{value:107991,perSecond:1213.3820224719102},"benchmark.pool_overflow":{value:9,perSecond:.10112359550561797},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:21,perSecond:.23595505617977527},upstream_cx_rx_bytes_total:{value:16954587,perSecond:190500.9775280899},upstream_cx_total:{value:21,perSecond:.23595505617977527},upstream_cx_tx_bytes_total:{value:4859595,perSecond:54602.191011235955},upstream_rq_pending_overflow:{value:9,perSecond:.10112359550561797},upstream_rq_pending_total:{value:21,perSecond:.23595505617977527},upstream_rq_total:{value:107991,perSecond:1213.3820224719102}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:399.97777777777776,totalRequests:35998,latency:{max:29.652991,min:.297424,mean:.40774499999999997,pstdev:.5738810000000001,percentiles:{p50:.371663,p75:.384431,p80:.388447,p90:.403167,p95:.435055,p99:.9181750000000001,p999:7.789054999999999}},resources:{envoyGateway:{memory:{max:147.078125,min:142.0546875,mean:143.29973958333332},cpu:{max:.933333333333337,min:.8000000000000304,mean:.8579710144927519}},envoyProxy:{memory:{max:101.5859375,min:101.1484375,mean:101.260546875},cpu:{max:8.503712683739975,min:5.653550666357093,mean:8.023664163938273}}},poolOverflow:2,upstreamConnections:11,counters:{"benchmark.http_2xx":{value:35998,perSecond:399.97777777777776},"benchmark.pool_overflow":{value:2,perSecond:.022222222222222223},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:11,perSecond:.12222222222222222},upstream_cx_rx_bytes_total:{value:5651686,perSecond:62796.51111111111},upstream_cx_total:{value:11,perSecond:.12222222222222222},upstream_cx_tx_bytes_total:{value:1619910,perSecond:17999},upstream_rq_pending_overflow:{value:2,perSecond:.022222222222222223},upstream_rq_pending_total:{value:11,perSecond:.12222222222222222},upstream_rq_total:{value:35998,perSecond:399.97777777777776}}}]},Bee={metadata:{version:"1.7.5",runId:"1.7.5-release-2026-07-08",date:"2026-07-08T15:36:49Z",environment:"GitHub Release",description:"Benchmark results for version 1.7.5 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.7.5/benchmark_report.zip",testConfiguration:{connections:100,cpuLimit:"1000m",duration:90,memoryLimit:"2000Mi",rps:100}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:404.46067415730334,totalRequests:35997,latency:{max:40.740863000000004,min:.378976,mean:.5088929999999999,pstdev:.7275590000000001,percentiles:{p50:.475471,p75:.49051100000000003,p80:.49487900000000007,p90:.510031,p95:.5354230000000001,p99:1.0564470000000001,p999:4.872703}},resources:{envoyGateway:{memory:{max:130.08984375,min:125.99609375,mean:128.72135416666666},cpu:{max:1.0666666666666662,min:.13333333333333347,mean:.3555555555555555}},envoyProxy:{memory:{max:23.609375,min:23.11328125,mean:23.408333333333335},cpu:{max:10.531097611033577,min:6.74744975768273,mean:10.076916047509108}}},poolOverflow:3,upstreamConnections:13,counters:{"benchmark.http_2xx":{value:35997,perSecond:404.46067415730334},"benchmark.pool_overflow":{value:3,perSecond:.033707865168539325},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:13,perSecond:.14606741573033707},upstream_cx_rx_bytes_total:{value:5651529,perSecond:63500.32584269663},upstream_cx_total:{value:13,perSecond:.14606741573033707},upstream_cx_tx_bytes_total:{value:1619865,perSecond:18200.73033707865},upstream_rq_pending_overflow:{value:3,perSecond:.033707865168539325},upstream_rq_pending_total:{value:13,perSecond:.14606741573033707},upstream_rq_total:{value:35997,perSecond:404.46067415730334}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1213.0224719101125,totalRequests:107959,latency:{max:63.63545499999999,min:.35260800000000003,mean:.487317,pstdev:.512447,percentiles:{p50:.450335,p75:.470415,p80:.47551899999999997,p90:.494223,p95:.538207,p99:1.389247,p999:5.619967}},resources:{envoyGateway:{memory:{max:137.29296875,min:135.15234375,mean:135.28619791666668},cpu:{max:2.0666666666666655,min:.13333333333333347,mean:.513333333333333}},envoyProxy:{memory:{max:29.578125,min:27.1796875,mean:29.144401041666665},cpu:{max:30.144766966475878,min:17.716992856688087,mean:26.46859586575745}}},poolOverflow:41,upstreamConnections:32,counters:{"benchmark.http_2xx":{value:107959,perSecond:1213.0224719101125},"benchmark.pool_overflow":{value:41,perSecond:.4606741573033708},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:32,perSecond:.3595505617977528},upstream_cx_rx_bytes_total:{value:16949563,perSecond:190444.52808988764},upstream_cx_total:{value:32,perSecond:.3595505617977528},upstream_cx_tx_bytes_total:{value:4858155,perSecond:54586.011235955055},upstream_rq_pending_overflow:{value:41,perSecond:.4606741573033708},upstream_rq_pending_total:{value:32,perSecond:.3595505617977528},upstream_rq_total:{value:107959,perSecond:1213.0224719101125}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:2020.2696629213483,totalRequests:179804,latency:{max:85.991423,min:.290608,mean:.49629199999999996,pstdev:.7787850000000001,percentiles:{p50:.43433499999999997,p75:.457519,p80:.464767,p90:.495855,p95:.6559670000000001,p99:1.870719,p999:7.932671000000001}},resources:{envoyGateway:{memory:{max:138.1015625,min:138.1015625,mean:138.1015625},cpu:{max:2.533333333333333,min:.13333333333333347,mean:.6111111111111112}},envoyProxy:{memory:{max:36.19140625,min:33.421875,mean:35.618489583333336},cpu:{max:46.994710251098866,min:46.994710251098866,mean:46.994710251098866}}},poolOverflow:196,upstreamConnections:54,counters:{"benchmark.http_2xx":{value:179804,perSecond:2020.2696629213483},"benchmark.pool_overflow":{value:196,perSecond:2.202247191011236},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:54,perSecond:.6067415730337079},upstream_cx_rx_bytes_total:{value:28229228,perSecond:317182.3370786517},upstream_cx_total:{value:54,perSecond:.6067415730337079},upstream_cx_tx_bytes_total:{value:8091180,perSecond:90912.13483146067},upstream_rq_pending_overflow:{value:196,perSecond:2.202247191011236},upstream_rq_pending_total:{value:54,perSecond:.6067415730337079},upstream_rq_total:{value:179804,perSecond:2020.2696629213483}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3199.4555555555557,totalRequests:287951,latency:{max:138.452991,min:.264784,mean:1.207951,pstdev:5.162012,percentiles:{p50:.5925750000000001,p75:.6785909999999999,p80:.7471030000000001,p90:1.249087,p95:2.074879,p99:12.977151,p999:89.747455}},resources:{envoyGateway:{memory:{max:144.7265625,min:142.16015625,mean:143.97526041666666},cpu:{max:5.066666666666677,min:.1333333333333305,mean:.9888888888888895}},envoyProxy:{memory:{max:68,min:58.19140625,mean:64.08984375},cpu:{max:68.22084858569042,min:41.70343299524441,mean:61.86047234637115}}},poolOverflow:49,upstreamConnections:326,counters:{"benchmark.http_2xx":{value:287951,perSecond:3199.4555555555557},"benchmark.pool_overflow":{value:49,perSecond:.5444444444444444},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:326,perSecond:3.6222222222222222},upstream_cx_rx_bytes_total:{value:45208307,perSecond:502314.52222222224},upstream_cx_total:{value:326,perSecond:3.6222222222222222},upstream_cx_tx_bytes_total:{value:12957795,perSecond:143975.5},upstream_rq_pending_overflow:{value:49,perSecond:.5444444444444444},upstream_rq_pending_total:{value:326,perSecond:3.6222222222222222},upstream_rq_total:{value:287951,perSecond:3199.4555555555557}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3999.177777777778,totalRequests:359926,latency:{max:443.858943,min:.264192,mean:3.7524490000000004,pstdev:15.938013000000002,percentiles:{p50:.711615,p75:1.2355829999999999,p80:1.5825909999999999,p90:3.236863,p95:7.336958999999999,p99:85.340159,p999:157.859839}},resources:{envoyGateway:{memory:{max:161.8671875,min:152.77734375,mean:160.35221354166666},cpu:{max:7.000000000000004,min:.19999999999998386,mean:1.3555555555555538}},envoyProxy:{memory:{max:92.54296875,min:84.4609375,mean:89.76236979166667},cpu:{max:80.72387478849407,min:44.87404051042136,mean:62.13861607744482}}},poolOverflow:71,upstreamConnections:329,counters:{"benchmark.http_2xx":{value:359926,perSecond:3999.177777777778},"benchmark.pool_overflow":{value:71,perSecond:.7888888888888889},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:329,perSecond:3.6555555555555554},upstream_cx_rx_bytes_total:{value:56508382,perSecond:627870.911111111},upstream_cx_total:{value:329,perSecond:3.6555555555555554},upstream_cx_tx_bytes_total:{value:16196805,perSecond:179964.5},upstream_rq_pending_overflow:{value:71,perSecond:.7888888888888889},upstream_rq_pending_total:{value:329,perSecond:3.6555555555555554},upstream_rq_total:{value:359929,perSecond:3999.211111111111}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:5385.4,totalRequests:484686,latency:{max:1876.885503,min:1.8483200000000002,mean:58.245123,pstdev:26.072029,percentiles:{p50:56.051711,p75:65.304575,p80:67.309567,p90:71.97081499999999,p95:77.377535,p99:109.314047,p999:174.579711}},resources:{envoyGateway:{memory:{max:183.9609375,min:173.19921875,mean:174.90078125},cpu:{max:13.666666666666744,min:.19999999999991283,mean:2.4843792691346436}},envoyProxy:{memory:{max:143.34765625,min:135.33984375,mean:140.876171875},cpu:{max:99.63894164326153,min:98.67385725741774,mean:99.26863566184787}}},poolOverflow:84,upstreamConnections:316,counters:{"benchmark.http_2xx":{value:484686,perSecond:5385.4},"benchmark.pool_overflow":{value:84,perSecond:.9333333333333333},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:316,perSecond:3.511111111111111},upstream_cx_rx_bytes_total:{value:76095702,perSecond:845507.8},upstream_cx_total:{value:316,perSecond:3.511111111111111},upstream_cx_tx_bytes_total:{value:21825090,perSecond:242501},upstream_rq_pending_overflow:{value:84,perSecond:.9333333333333333},upstream_rq_pending_total:{value:316,perSecond:3.511111111111111},upstream_rq_total:{value:485002,perSecond:5388.9111111111115}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3999.0222222222224,totalRequests:359912,latency:{max:332.857343,min:.26344,mean:2.509089,pstdev:9.775503,percentiles:{p50:.6791670000000001,p75:1.0431030000000001,p80:1.311679,p90:2.827135,p95:5.955071,p99:55.834623,p999:98.39411100000001}},resources:{envoyGateway:{memory:{max:190.32421875,min:158.69921875,mean:164.38671875},cpu:{max:.2666666666667084,min:.1333333333333068,mean:.20000000000000753}},envoyProxy:{memory:{max:148.25390625,min:141.0546875,mean:143.53841145833334},cpu:{max:80.86865352647818,min:44.001111287746824,mean:74.12282990985476}}},poolOverflow:86,upstreamConnections:314,counters:{"benchmark.http_2xx":{value:359912,perSecond:3999.0222222222224},"benchmark.pool_overflow":{value:86,perSecond:.9555555555555556},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:314,perSecond:3.488888888888889},upstream_cx_rx_bytes_total:{value:56506184,perSecond:627846.4888888889},upstream_cx_total:{value:314,perSecond:3.488888888888889},upstream_cx_tx_bytes_total:{value:16196130,perSecond:179957},upstream_rq_pending_overflow:{value:86,perSecond:.9555555555555556},upstream_rq_pending_total:{value:314,perSecond:3.488888888888889},upstream_rq_total:{value:359914,perSecond:3999.0444444444443}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3198.988888888889,totalRequests:287909,latency:{max:116.113407,min:.277152,mean:1.150514,pstdev:3.81955,percentiles:{p50:.591263,p75:.679039,p80:.7616949999999999,p90:1.3676789999999999,p95:2.382847,p99:14.532606999999999,p999:55.408639}},resources:{envoyGateway:{memory:{max:159.09375,min:157.96875,mean:158.69596354166666},cpu:{max:.2668979782478565,min:.1333333333333068,mean:.1939919647532957}},envoyProxy:{memory:{max:142.52734375,min:141.1953125,mean:141.98515625},cpu:{max:68.17021856339512,min:46.6719064597314,mean:66.0963438187755}}},poolOverflow:90,upstreamConnections:221,counters:{"benchmark.http_2xx":{value:287909,perSecond:3198.988888888889},"benchmark.pool_overflow":{value:90,perSecond:1},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:221,perSecond:2.4555555555555557},upstream_cx_rx_bytes_total:{value:45201713,perSecond:502241.2555555556},upstream_cx_total:{value:221,perSecond:2.4555555555555557},upstream_cx_tx_bytes_total:{value:12955950,perSecond:143955},upstream_rq_pending_overflow:{value:90,perSecond:1},upstream_rq_pending_total:{value:221,perSecond:2.4555555555555557},upstream_rq_total:{value:287910,perSecond:3199}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:2020.6966292134832,totalRequests:179842,latency:{max:83.697663,min:.286272,mean:.5179819999999999,pstdev:.9698060000000001,percentiles:{p50:.442751,p75:.464303,p80:.470031,p90:.495839,p95:.679071,p99:2.114815,p999:10.049535}},resources:{envoyGateway:{memory:{max:168.8359375,min:149.0625,mean:153.08723958333334},cpu:{max:4.066666666666663,min:.13333333333340155,mean:.9599999999999984}},envoyProxy:{memory:{max:141.69921875,min:141.21875,mean:141.47200520833334},cpu:{max:48.569813084112255,min:48.077679610985385,mean:48.32794707266626}}},poolOverflow:158,upstreamConnections:63,counters:{"benchmark.http_2xx":{value:179842,perSecond:2020.6966292134832},"benchmark.pool_overflow":{value:158,perSecond:1.7752808988764044},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:63,perSecond:.7078651685393258},upstream_cx_rx_bytes_total:{value:28235194,perSecond:317249.37078651687},upstream_cx_total:{value:63,perSecond:.7078651685393258},upstream_cx_tx_bytes_total:{value:8092890,perSecond:90931.34831460674},upstream_rq_pending_overflow:{value:158,perSecond:1.7752808988764044},upstream_rq_pending_total:{value:63,perSecond:.7078651685393258},upstream_rq_total:{value:179842,perSecond:2020.6966292134832}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1212.5280898876404,totalRequests:107915,latency:{max:66.39001499999999,min:.34712000000000004,mean:.501021,pstdev:.9397420000000001,percentiles:{p50:.45027100000000003,p75:.468511,p80:.473327,p90:.490223,p95:.5424950000000001,p99:1.3708150000000001,p999:9.019903}},resources:{envoyGateway:{memory:{max:150.3125,min:138.4140625,mean:140.31223958333334},cpu:{max:.2000000000000076,min:.1333333333333068,mean:.17878787878789712}},envoyProxy:{memory:{max:141.70703125,min:140.8828125,mean:141.17109375},cpu:{max:30.12063364308174,min:19.692582564011218,mean:28.7662632231051}}},poolOverflow:85,upstreamConnections:38,counters:{"benchmark.http_2xx":{value:107915,perSecond:1212.5280898876404},"benchmark.pool_overflow":{value:85,perSecond:.9550561797752809},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:38,perSecond:.42696629213483145},upstream_cx_rx_bytes_total:{value:16942655,perSecond:190366.91011235956},upstream_cx_total:{value:38,perSecond:.42696629213483145},upstream_cx_tx_bytes_total:{value:4856175,perSecond:54563.76404494382},upstream_rq_pending_overflow:{value:85,perSecond:.9550561797752809},upstream_rq_pending_total:{value:38,perSecond:.42696629213483145},upstream_rq_total:{value:107915,perSecond:1212.5280898876404}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:399.96666666666664,totalRequests:35997,latency:{max:57.362431,min:.38779199999999997,mean:.49359100000000006,pstdev:.429145,percentiles:{p50:.468223,p75:.486559,p80:.491615,p90:.507215,p95:.528639,p99:1.005791,p999:4.174847}},resources:{envoyGateway:{memory:{max:145.31640625,min:139.6640625,mean:144.648828125},cpu:{max:.20000000000000764,min:.1333333333333068,mean:.17222222222221562}},envoyProxy:{memory:{max:140.9921875,min:140.70703125,mean:140.89322916666666},cpu:{max:10.635300213744282,min:7.031060889842074,mean:9.981794070354459}}},poolOverflow:3,upstreamConnections:11,counters:{"benchmark.http_2xx":{value:35997,perSecond:399.96666666666664},"benchmark.pool_overflow":{value:3,perSecond:.03333333333333333},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:11,perSecond:.12222222222222222},upstream_cx_rx_bytes_total:{value:5651529,perSecond:62794.76666666667},upstream_cx_total:{value:11,perSecond:.12222222222222222},upstream_cx_tx_bytes_total:{value:1619865,perSecond:17998.5},upstream_rq_pending_overflow:{value:3,perSecond:.03333333333333333},upstream_rq_pending_total:{value:11,perSecond:.12222222222222222},upstream_rq_total:{value:35997,perSecond:399.96666666666664}}}]},zee={metadata:{version:"1.8.3",runId:"1.8.3-release-2026-07-22",date:"2026-07-22T18:59:16Z",environment:"GitHub Release",description:"Benchmark results for version 1.8.3 from release artifacts",downloadUrl:"https://github.com/envoyproxy/gateway/releases/download/v1.8.3/benchmark_report.zip",testConfiguration:{connections:100,cpuLimit:"1000m",duration:90,memoryLimit:"2000Mi",rps:100}},results:[{testName:"scaling up httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-up",throughput:399.9222222222222,totalRequests:35993,latency:{max:51.132415,min:.365536,mean:.5075770000000001,pstdev:.444223,percentiles:{p50:.472159,p75:.49329500000000004,p80:.500303,p90:.526463,p95:.575455,p99:1.173119,p999:4.875263}},resources:{envoyGateway:{memory:{max:131.94921875,min:110.19921875,mean:125.26692708333333},cpu:{max:1.0666666666666664,min:.3999999999999996,mean:.5866666666666666}},envoyProxy:{memory:{max:21.28515625,min:7.125,mean:19.7890625},cpu:{max:0,min:0,mean:0}}},poolOverflow:7,upstreamConnections:9,counters:{"benchmark.http_2xx":{value:35993,perSecond:399.9222222222222},"benchmark.pool_overflow":{value:7,perSecond:.07777777777777778},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:9,perSecond:.1},upstream_cx_rx_bytes_total:{value:5650901,perSecond:62787.78888888889},upstream_cx_total:{value:9,perSecond:.1},upstream_cx_tx_bytes_total:{value:1619685,perSecond:17996.5},upstream_rq_pending_overflow:{value:7,perSecond:.07777777777777778},upstream_rq_pending_total:{value:9,perSecond:.1},upstream_rq_total:{value:35993,perSecond:399.9222222222222}}},{testName:"scaling up httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-up",throughput:1213.0674157303372,totalRequests:107963,latency:{max:114.163711,min:.32768,mean:.517349,pstdev:.606409,percentiles:{p50:.461327,p75:.5228309999999999,p80:.543999,p90:.585855,p95:.707199,p99:1.271103,p999:4.477951}},resources:{envoyGateway:{memory:{max:135.23046875,min:128.62890625,mean:133.09075520833332},cpu:{max:.6666666666666672,min:.39999999999999886,mean:.5583333333333336}},envoyProxy:{memory:{max:25.62890625,min:20.78515625,mean:24.804817708333335},cpu:{max:29.86671699062718,min:29.61201171177602,mean:29.771014316353924}}},poolOverflow:37,upstreamConnections:28,counters:{"benchmark.http_2xx":{value:107963,perSecond:1213.0674157303372},"benchmark.pool_overflow":{value:37,perSecond:.4157303370786517},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:28,perSecond:.3146067415730337},upstream_cx_rx_bytes_total:{value:16950191,perSecond:190451.5842696629},upstream_cx_total:{value:28,perSecond:.3146067415730337},upstream_cx_tx_bytes_total:{value:4858335,perSecond:54588.03370786517},upstream_rq_pending_overflow:{value:37,perSecond:.4157303370786517},upstream_rq_pending_total:{value:28,perSecond:.3146067415730337},upstream_rq_total:{value:107963,perSecond:1213.0674157303372}}},{testName:"scaling up httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-up",throughput:1998.588888888889,totalRequests:179873,latency:{max:96.337919,min:.34664,mean:.5038170000000001,pstdev:.744036,percentiles:{p50:.45004700000000003,p75:.47902300000000003,p80:.488255,p90:.5363829999999999,p95:.714111,p99:1.4520309999999998,p999:4.068095}},resources:{envoyGateway:{memory:{max:144.8125,min:132.7578125,mean:139.57135416666668},cpu:{max:.7999999999999977,min:.4666666666666685,mean:.6608695652173914}},envoyProxy:{memory:{max:29.76171875,min:25.0078125,mean:28.669921875},cpu:{max:50.28680540957189,min:49.74902974451187,mean:50.00520828577484}}},poolOverflow:127,upstreamConnections:30,counters:{"benchmark.http_2xx":{value:179873,perSecond:1998.588888888889},"benchmark.pool_overflow":{value:127,perSecond:1.4111111111111112},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:30,perSecond:.3333333333333333},upstream_cx_rx_bytes_total:{value:28240061,perSecond:313778.4555555555},upstream_cx_total:{value:30,perSecond:.3333333333333333},upstream_cx_tx_bytes_total:{value:8094285,perSecond:89936.5},upstream_rq_pending_overflow:{value:127,perSecond:1.4111111111111112},upstream_rq_pending_total:{value:30,perSecond:.3333333333333333},upstream_rq_total:{value:179873,perSecond:1998.588888888889}}},{testName:"scaling up httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-up",throughput:3198.777777777778,totalRequests:287890,latency:{max:90.623999,min:.321952,mean:.879421,pstdev:2.6107489999999998,percentiles:{p50:.6053430000000001,p75:.679487,p80:.715039,p90:.884159,p95:1.155903,p99:5.443071,p999:48.566271}},resources:{envoyGateway:{memory:{max:155.81640625,min:139.4140625,mean:150.62825520833334},cpu:{max:24.6,min:.7333333333333295,mean:5.0809523809523816}},envoyProxy:{memory:{max:49.01953125,min:39.38671875,mean:46.757161458333336},cpu:{max:71.12555608516043,min:45.798966963013314,mean:66.45335458648839}}},poolOverflow:109,upstreamConnections:183,counters:{"benchmark.http_2xx":{value:287890,perSecond:3198.777777777778},"benchmark.pool_overflow":{value:109,perSecond:1.211111111111111},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:183,perSecond:2.033333333333333},upstream_cx_rx_bytes_total:{value:45198730,perSecond:502208.1111111111},upstream_cx_total:{value:183,perSecond:2.033333333333333},upstream_cx_tx_bytes_total:{value:12955095,perSecond:143945.5},upstream_rq_pending_overflow:{value:109,perSecond:1.211111111111111},upstream_rq_pending_total:{value:183,perSecond:2.033333333333333},upstream_rq_total:{value:287891,perSecond:3198.788888888889}}},{testName:"scaling up httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-up",throughput:3998.7555555555555,totalRequests:359888,latency:{max:257.10591900000003,min:.32776,mean:1.966448,pstdev:8.562240000000001,percentiles:{p50:.6871349999999999,p75:.857279,p80:.9281590000000001,p90:1.254015,p95:2.1233910000000003,p99:51.021823,p999:103.79263900000001}},resources:{envoyGateway:{memory:{max:166.37109375,min:151.65625,mean:163.66588541666667},cpu:{max:37.79999999999999,min:.8666666666666836,mean:7.569047619047619}},envoyProxy:{memory:{max:69.76953125,min:56.01171875,mean:64.37630208333333},cpu:{max:85.0582403306762,min:54.320248558863284,mean:76.69461944531828}}},poolOverflow:108,upstreamConnections:292,counters:{"benchmark.http_2xx":{value:359888,perSecond:3998.7555555555555},"benchmark.pool_overflow":{value:108,perSecond:1.2},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:292,perSecond:3.2444444444444445},upstream_cx_rx_bytes_total:{value:56502416,perSecond:627804.6222222223},upstream_cx_total:{value:292,perSecond:3.2444444444444445},upstream_cx_tx_bytes_total:{value:16195140,perSecond:179946},upstream_rq_pending_overflow:{value:108,perSecond:1.2},upstream_rq_pending_total:{value:292,perSecond:3.2444444444444445},upstream_rq_total:{value:359892,perSecond:3998.8}}},{testName:"scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps",routes:1e3,routesPerHostname:200,phase:"scaling-up",throughput:4517.711111111111,totalRequests:406594,latency:{max:2134.704127,min:1.891712,mean:73.911531,pstdev:29.014477,percentiles:{p50:72.912895,p75:83.714047,p80:85.831679,p90:89.993215,p95:93.27820700000001,p99:115.322879,p999:180.101119}},resources:{envoyGateway:{memory:{max:185.81640625,min:170.34375,mean:180.59635416666666},cpu:{max:97.33333333333334,min:.8666666666666363,mean:16.279999999999998}},envoyProxy:{memory:{max:104.75390625,min:88.48046875,mean:100.72252604166667},cpu:{max:99.34067522187586,min:68.32545834029196,mean:95.7042618494685}}},poolOverflow:64,upstreamConnections:336,counters:{"benchmark.http_2xx":{value:406594,perSecond:4517.711111111111},"benchmark.pool_overflow":{value:64,perSecond:.7111111111111111},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:336,perSecond:3.7333333333333334},upstream_cx_rx_bytes_total:{value:63835258,perSecond:709280.6444444444},upstream_cx_total:{value:336,perSecond:3.7333333333333334},upstream_cx_tx_bytes_total:{value:18311850,perSecond:203465},upstream_rq_pending_overflow:{value:64,perSecond:.7111111111111111},upstream_rq_pending_total:{value:336,perSecond:3.7333333333333334},upstream_rq_total:{value:406930,perSecond:4521.444444444444}}},{testName:"scaling down httproutes to 500 with 100 routes per hostname at 1000 rps",routes:500,routesPerHostname:100,phase:"scaling-down",throughput:3999.3,totalRequests:359937,latency:{max:259.268607,min:.322704,mean:2.020829,pstdev:9.292394,percentiles:{p50:.711231,p75:.899839,p80:.9801269999999999,p90:1.384511,p95:2.4189429999999996,p99:47.151103,p999:111.84947100000001}},resources:{envoyGateway:{memory:{max:185.05078125,min:166.546875,mean:171.54231770833334},cpu:{max:9.133333333333269,min:1.0000000000000377,mean:2.746666666666671}},envoyProxy:{memory:{max:104.9453125,min:103.35546875,mean:104.48984375},cpu:{max:0,min:0,mean:0}}},poolOverflow:60,upstreamConnections:340,counters:{"benchmark.http_2xx":{value:359937,perSecond:3999.3},"benchmark.pool_overflow":{value:60,perSecond:.6666666666666666},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:340,perSecond:3.7777777777777777},upstream_cx_rx_bytes_total:{value:56510109,perSecond:627890.1},upstream_cx_total:{value:340,perSecond:3.7777777777777777},upstream_cx_tx_bytes_total:{value:16197300,perSecond:179970},upstream_rq_pending_overflow:{value:60,perSecond:.6666666666666666},upstream_rq_pending_total:{value:340,perSecond:3.7777777777777777},upstream_rq_total:{value:359940,perSecond:3999.3333333333335}}},{testName:"scaling down httproutes to 300 with 60 routes per hostname at 800 rps",routes:300,routesPerHostname:60,phase:"scaling-down",throughput:3197.8444444444444,totalRequests:287806,latency:{max:154.599423,min:.32588799999999996,mean:.934964,pstdev:3.035537,percentiles:{p50:.610079,p75:.691455,p80:.7298870000000001,p90:.9088949999999999,p95:1.200511,p99:6.1445110000000005,p999:49.352703}},resources:{envoyGateway:{memory:{max:172.7265625,min:156.8515625,mean:160.60690104166667},cpu:{max:1.3333333333333524,min:1.066666666666644,mean:1.1826086956521698}},envoyProxy:{memory:{max:104.6640625,min:103.58984375,mean:104.109375},cpu:{max:71.65725755667467,min:47.0471566150785,mean:64.86687438895122}}},poolOverflow:192,upstreamConnections:200,counters:{"benchmark.http_2xx":{value:287806,perSecond:3197.8444444444444},"benchmark.pool_overflow":{value:192,perSecond:2.1333333333333333},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:200,perSecond:2.2222222222222223},upstream_cx_rx_bytes_total:{value:45185542,perSecond:502061.5777777778},upstream_cx_total:{value:200,perSecond:2.2222222222222223},upstream_cx_tx_bytes_total:{value:12951360,perSecond:143904},upstream_rq_pending_overflow:{value:192,perSecond:2.1333333333333333},upstream_rq_pending_total:{value:200,perSecond:2.2222222222222223},upstream_rq_total:{value:287808,perSecond:3197.866666666667}}},{testName:"scaling down httproutes to 100 with 20 routes per hostname at 500 rps",routes:100,routesPerHostname:20,phase:"scaling-down",throughput:1999.4777777777779,totalRequests:179953,latency:{max:61.347839,min:.350352,mean:.5134029999999999,pstdev:.723512,percentiles:{p50:.453935,p75:.478639,p80:.48667099999999996,p90:.532191,p95:.724031,p99:1.5605110000000002,p999:6.3656950000000005}},resources:{envoyGateway:{memory:{max:159.91015625,min:148.28125,mean:152.69010416666666},cpu:{max:1.1333333333333446,min:1.066666666666644,mean:1.0984126984126914}},envoyProxy:{memory:{max:103.7421875,min:103.0078125,mean:103.44661458333333},cpu:{max:48.42706517227081,min:46.78797542871779,mean:47.43269954796724}}},poolOverflow:47,upstreamConnections:37,counters:{"benchmark.http_2xx":{value:179953,perSecond:1999.4777777777779},"benchmark.pool_overflow":{value:47,perSecond:.5222222222222223},"cluster_manager.cluster_added":{value:4,perSecond:.044444444444444446},"default.total_match_count":{value:4,perSecond:.044444444444444446},membership_change:{value:4,perSecond:.044444444444444446},"runtime.load_success":{value:1,perSecond:.011111111111111112},"runtime.override_dir_not_exists":{value:1,perSecond:.011111111111111112},upstream_cx_http1_total:{value:37,perSecond:.4111111111111111},upstream_cx_rx_bytes_total:{value:28252621,perSecond:313918.0111111111},upstream_cx_total:{value:37,perSecond:.4111111111111111},upstream_cx_tx_bytes_total:{value:8097885,perSecond:89976.5},upstream_rq_pending_overflow:{value:47,perSecond:.5222222222222223},upstream_rq_pending_total:{value:37,perSecond:.4111111111111111},upstream_rq_total:{value:179953,perSecond:1999.4777777777779}}},{testName:"scaling down httproutes to 50 with 10 routes per hostname at 300 rps",routes:50,routesPerHostname:10,phase:"scaling-down",throughput:1213.4044943820224,totalRequests:107993,latency:{max:23.735295,min:.37063999999999997,mean:.49363100000000004,pstdev:.28475799999999996,percentiles:{p50:.45791899999999996,p75:.477263,p80:.483407,p90:.5164949999999999,p95:.575231,p99:1.3491829999999998,p999:3.8708470000000004}},resources:{envoyGateway:{memory:{max:154.03125,min:137.33203125,mean:144.51171875},cpu:{max:1.2666666666666515,min:1.066666666666644,mean:1.1333333333333244}},envoyProxy:{memory:{max:103.5078125,min:103.0078125,mean:103.279296875},cpu:{max:31.498524849265436,min:31.498524849265436,mean:31.498524849265436}}},poolOverflow:7,upstreamConnections:22,counters:{"benchmark.http_2xx":{value:107993,perSecond:1213.4044943820224},"benchmark.pool_overflow":{value:7,perSecond:.07865168539325842},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:22,perSecond:.24719101123595505},upstream_cx_rx_bytes_total:{value:16954901,perSecond:190504.50561797753},upstream_cx_total:{value:22,perSecond:.24719101123595505},upstream_cx_tx_bytes_total:{value:4859685,perSecond:54603.20224719101},upstream_rq_pending_overflow:{value:7,perSecond:.07865168539325842},upstream_rq_pending_total:{value:22,perSecond:.24719101123595505},upstream_rq_total:{value:107993,perSecond:1213.4044943820224}}},{testName:"scaling down httproutes to 10 with 2 routes per hostname at 100 rps",routes:10,routesPerHostname:2,phase:"scaling-down",throughput:404.4943820224719,totalRequests:36e3,latency:{max:19.070975,min:.393632,mean:.521772,pstdev:.373193,percentiles:{p50:.48030300000000004,p75:.505807,p80:.514799,p90:.548639,p95:.598719,p99:1.2974709999999998,p999:5.102591}},resources:{envoyGateway:{memory:{max:148.15234375,min:134.84375,mean:141.89518229166666},cpu:{max:1.1333333333333449,min:1.0000000000000377,mean:1.066666666666667}},envoyProxy:{memory:{max:103.5546875,min:103.04296875,mean:103.24778645833334},cpu:{max:11.451342242194794,min:6.591708918838274,mean:9.783392879522161}}},poolOverflow:0,upstreamConnections:10,counters:{"benchmark.http_2xx":{value:36e3,perSecond:404.4943820224719},"cluster_manager.cluster_added":{value:4,perSecond:.0449438202247191},"default.total_match_count":{value:4,perSecond:.0449438202247191},membership_change:{value:4,perSecond:.0449438202247191},"runtime.load_success":{value:1,perSecond:.011235955056179775},"runtime.override_dir_not_exists":{value:1,perSecond:.011235955056179775},upstream_cx_http1_total:{value:10,perSecond:.11235955056179775},upstream_cx_rx_bytes_total:{value:5652e3,perSecond:63505.61797752809},upstream_cx_total:{value:10,perSecond:.11235955056179775},upstream_cx_tx_bytes_total:{value:162e4,perSecond:18202.247191011236},upstream_rq_pending_total:{value:10,perSecond:.11235955056179775},upstream_rq_total:{value:36e3,perSecond:404.4943820224719}}}]},sh=[zee,Fee,Bee,Hee,Gee,Lee,$ee,Dee,Iee,Mee,eee,tee,nee,ree,aee,oee,iee,see,uee,lee,cee,pee,mee,dee,fee,vee,hee,yee,_ee,gee,xee,wee,bee,See,Pee,Oee,kee,Cee,Aee,Eee,Ree,Tee,Nee,qee,jee],Uee=()=>sh.map(e=>e.metadata.version),Yi=sh.find(e=>e.metadata.version==="1.4.1"),tn=(Yi==null?void 0:Yi.results)||[];Yi!=null&&Yi.metadata.testConfiguration;tn.length,tn.filter(e=>e.phase==="scaling-up").length,tn.filter(e=>e.phase==="scaling-down").length,tn.length>0&&Math.max(...tn.map(e=>e.routes)),tn.length>0&&Math.min(...tn.map(e=>e.routes)),tn.length>0&&tn.reduce((e,t)=>e+t.throughput,0)/tn.length,tn.length>0&&tn.reduce((e,t)=>e+t.latency.mean,0)/tn.length;tn.map(e=>({routes:e.routes,phase:e.phase,p50:e.latency.percentiles.p50,p75:e.latency.percentiles.p75,p90:e.latency.percentiles.p90,p95:e.latency.percentiles.p95,p99:e.latency.percentiles.p99,p999:e.latency.percentiles.p999}));tn.map(e=>({routes:e.routes,phase:e.phase,envoyGatewayMemory:e.resources.envoyGateway.memory.mean,envoyGatewayCpu:e.resources.envoyGateway.cpu.mean,envoyProxyMemory:e.resources.envoyProxy.memory.mean,envoyProxyCpu:e.resources.envoyProxy.cpu.mean}));tn.map(e=>({testName:e.testName,routes:e.routes,phase:e.phase,throughput:e.throughput,meanLatency:e.latency.mean,p95Latency:e.latency.percentiles.p95,totalMemory:e.resources.envoyGateway.memory.mean+e.resources.envoyProxy.memory.mean,totalCpu:e.resources.envoyGateway.cpu.mean+e.resources.envoyProxy.cpu.mean}));const Wee=()=>{const e=Uee(),[t,n]=R.useState(e[0]||""),r=R.useMemo(()=>sh.find(i=>i.metadata.version===t),[t]),a=R.useMemo(()=>{if(!r)return{benchmarkResults:[],testConfiguration:{rps:1e4,connections:100,duration:30,cpuLimit:"1000m",memoryLimit:"2000Mi"},performanceSummary:{totalTests:0,scaleUpTests:0,scaleDownTests:0,maxRoutes:0,minRoutes:0,avgThroughput:0,avgLatency:0},latencyPercentileComparison:[],resourceTrends:[],performanceMatrix:[],metadata:null};const i=r.results;return{benchmarkResults:i,testConfiguration:r.metadata.testConfiguration,performanceSummary:{totalTests:i.length,scaleUpTests:i.filter(u=>u.phase==="scaling-up").length,scaleDownTests:i.filter(u=>u.phase==="scaling-down").length,maxRoutes:i.length>0?Math.max(...i.map(u=>u.routes)):0,minRoutes:i.length>0?Math.min(...i.map(u=>u.routes)):0,avgThroughput:i.length>0?i.reduce((u,l)=>u+l.throughput,0)/i.length:0,avgLatency:i.length>0?i.reduce((u,l)=>u+l.latency.mean,0)/i.length:0},latencyPercentileComparison:i.map(u=>({routes:u.routes,phase:u.phase,p50:u.latency.percentiles.p50,p75:u.latency.percentiles.p75,p90:u.latency.percentiles.p90,p95:u.latency.percentiles.p95,p99:u.latency.percentiles.p99,p999:u.latency.percentiles.p999})),resourceTrends:i.map(u=>({routes:u.routes,phase:u.phase,envoyGatewayMemory:u.resources.envoyGateway.memory.mean,envoyGatewayCpu:u.resources.envoyGateway.cpu.mean,envoyProxyMemory:u.resources.envoyProxy.memory.mean,envoyProxyCpu:u.resources.envoyProxy.cpu.mean})),performanceMatrix:i.map(u=>({testName:u.testName,routes:u.routes,phase:u.phase,throughput:u.throughput,meanLatency:u.latency.mean,p95Latency:u.latency.percentiles.p95,totalMemory:u.resources.envoyGateway.memory.mean+u.resources.envoyProxy.memory.mean,totalCpu:u.resources.envoyGateway.cpu.mean+u.resources.envoyProxy.cpu.mean})),metadata:r.metadata}},[r]);return{selectedVersion:t,setSelectedVersion:n,availableVersions:e,...a}},Vee=({apiBase:e="https://envoy-gateway-benchmark-report.netlify.app/api",initialVersion:t,theme:n="light",containerClassName:r="",features:a={header:!1,versionSelector:!0,summaryCards:!0,tabs:["overview","latency","resources"]}})=>{var u,l,c,m,f,d;const i=Wee();return R.useEffect(()=>{n==="dark"?document.documentElement.classList.add("dark"):document.documentElement.classList.remove("dark")},[n]),R.useEffect(()=>{const v=document.createElement("style");return v.textContent=` .benchmark-dashboard [data-radix-popper-content-wrapper] { z-index: 9999 !important; } .benchmark-dashboard .relative.z-50 { z-index: 9999 !important; } - `,document.head.appendChild(m),()=>{document.head.removeChild(m)}},[]),b.jsxs("div",{className:`benchmark-dashboard ${n} ${r}`,"data-theme":n,children:[a.header&&b.jsxs("div",{className:"mb-8",children:[b.jsx("h2",{className:"text-3xl font-bold",children:"Performance Benchmark Report Explorer"}),b.jsx("p",{className:"text-xl text-gray-600 dark:text-gray-300",children:"Detailed performance analysis"})]}),a.versionSelector&&b.jsx("div",{className:"mb-6",children:b.jsx("div",{className:"bg-white dark:bg-gray-800 rounded-xl shadow-lg p-4 w-full",children:b.jsx(zT,{selectedVersion:o.selectedVersion,availableVersions:o.availableVersions,onVersionChange:o.setSelectedVersion,metadata:o.metadata})})}),a.summaryCards&&o.performanceSummary&&b.jsx("div",{className:"mb-8",children:b.jsx(WT,{performanceSummary:o.performanceSummary,benchmarkResults:o.benchmarkResults})}),a.tabs&&a.tabs.length>0&&b.jsx("div",{className:"bg-white dark:bg-gray-800 rounded-2xl shadow-lg overflow-hidden",children:b.jsxs(Iie,{defaultValue:a.tabs[0],className:"w-full",children:[b.jsxs(wP,{className:`grid w-full ${a.tabs.length===1?"grid-cols-1":a.tabs.length===2?"grid-cols-2":"grid-cols-3"} bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 h-auto p-0 rounded-none`,children:[((i=a.tabs)==null?void 0:i.includes("overview"))&&b.jsx(Fc,{value:"overview",className:"data-[state=active]:bg-gradient-to-r data-[state=active]:from-purple-600 data-[state=active]:to-indigo-600 data-[state=active]:text-white data-[state=active]:shadow-lg data-[state=active]:border-b-2 data-[state=active]:border-purple-600 hover:bg-gray-50 dark:hover:bg-gray-700 text-sm sm:text-base py-4 px-6 rounded-t-lg border-b-2 border-transparent transition-all duration-200 font-medium",children:"Overview"}),((s=a.tabs)==null?void 0:s.includes("latency"))&&b.jsx(Fc,{value:"latency",className:"data-[state=active]:bg-gradient-to-r data-[state=active]:from-purple-600 data-[state=active]:to-indigo-600 data-[state=active]:text-white data-[state=active]:shadow-lg data-[state=active]:border-b-2 data-[state=active]:border-purple-600 hover:bg-gray-50 dark:hover:bg-gray-700 text-sm sm:text-base py-4 px-6 rounded-t-lg border-b-2 border-transparent transition-all duration-200 font-medium",children:"Request RTT Analysis"}),((u=a.tabs)==null?void 0:u.includes("resources"))&&b.jsx(Fc,{value:"resources",className:"data-[state=active]:bg-gradient-to-r data-[state=active]:from-purple-600 data-[state=active]:to-indigo-600 data-[state=active]:text-white data-[state=active]:shadow-lg data-[state=active]:border-b-2 data-[state=active]:border-purple-600 hover:bg-gray-50 dark:hover:bg-gray-700 text-sm sm:text-base py-4 px-6 rounded-t-lg border-b-2 border-transparent transition-all duration-200 font-medium",children:"Resource Usage"})]}),b.jsxs("div",{className:"p-6",children:[((l=a.tabs)==null?void 0:l.includes("overview"))&&b.jsx(zc,{value:"overview",children:b.jsx(hie,{performanceMatrix:o.performanceMatrix,benchmarkResults:o.benchmarkResults,testConfiguration:o.testConfiguration,performanceSummary:o.performanceSummary,latencyPercentileComparison:o.latencyPercentileComparison})}),((p=a.tabs)==null?void 0:p.includes("latency"))&&b.jsx(zc,{value:"latency",children:b.jsx(yie,{latencyPercentileComparison:o.latencyPercentileComparison,benchmarkResults:o.benchmarkResults})}),((c=a.tabs)==null?void 0:c.includes("resources"))&&b.jsx(zc,{value:"resources",children:b.jsx(gie,{resourceTrends:o.resourceTrends,benchmarkResults:o.benchmarkResults})})]})]})})]})};class bP{static async getAllCSS(){const t="shadow-dom-css";if(this.cssCache.has(t))return this.cssCache.get(t);try{let n="";const r=this.getBundledCSS();if(r){n=this.transformCSSForShadowDOM(r);const a=` + `,document.head.appendChild(v),()=>{document.head.removeChild(v)}},[]),E.jsxs("div",{className:`benchmark-dashboard ${n} ${r}`,"data-theme":n,children:[a.header&&E.jsxs("div",{className:"mb-8",children:[E.jsx("h2",{className:"text-3xl font-bold",children:"Performance Benchmark Report Explorer"}),E.jsx("p",{className:"text-xl text-gray-600 dark:text-gray-300",children:"Detailed performance analysis"})]}),a.versionSelector&&E.jsx("div",{className:"mb-6",children:E.jsx("div",{className:"bg-white dark:bg-gray-800 rounded-xl shadow-lg p-4 w-full",children:E.jsx(BM,{selectedVersion:i.selectedVersion,availableVersions:i.availableVersions,onVersionChange:i.setSelectedVersion,metadata:i.metadata})})}),a.summaryCards&&i.performanceSummary&&E.jsx("div",{className:"mb-8",children:E.jsx(UM,{performanceSummary:i.performanceSummary,benchmarkResults:i.benchmarkResults})}),a.tabs&&a.tabs.length>0&&E.jsx("div",{className:"bg-white dark:bg-gray-800 rounded-2xl shadow-lg overflow-hidden",children:E.jsxs(JJ,{defaultValue:a.tabs[0],className:"w-full",children:[E.jsxs(ZA,{className:`grid w-full ${a.tabs.length===1?"grid-cols-1":a.tabs.length===2?"grid-cols-2":"grid-cols-3"} bg-white dark:bg-gray-800 border-b border-gray-200 dark:border-gray-700 h-auto p-0 rounded-none`,children:[((u=a.tabs)==null?void 0:u.includes("overview"))&&E.jsx(Hp,{value:"overview",className:"data-[state=active]:bg-gradient-to-r data-[state=active]:from-purple-600 data-[state=active]:to-indigo-600 data-[state=active]:text-white data-[state=active]:shadow-lg data-[state=active]:border-b-2 data-[state=active]:border-purple-600 hover:bg-gray-50 dark:hover:bg-gray-700 text-sm sm:text-base py-4 px-6 rounded-t-lg border-b-2 border-transparent transition-all duration-200 font-medium",children:"Overview"}),((l=a.tabs)==null?void 0:l.includes("latency"))&&E.jsx(Hp,{value:"latency",className:"data-[state=active]:bg-gradient-to-r data-[state=active]:from-purple-600 data-[state=active]:to-indigo-600 data-[state=active]:text-white data-[state=active]:shadow-lg data-[state=active]:border-b-2 data-[state=active]:border-purple-600 hover:bg-gray-50 dark:hover:bg-gray-700 text-sm sm:text-base py-4 px-6 rounded-t-lg border-b-2 border-transparent transition-all duration-200 font-medium",children:"Request RTT Analysis"}),((c=a.tabs)==null?void 0:c.includes("resources"))&&E.jsx(Hp,{value:"resources",className:"data-[state=active]:bg-gradient-to-r data-[state=active]:from-purple-600 data-[state=active]:to-indigo-600 data-[state=active]:text-white data-[state=active]:shadow-lg data-[state=active]:border-b-2 data-[state=active]:border-purple-600 hover:bg-gray-50 dark:hover:bg-gray-700 text-sm sm:text-base py-4 px-6 rounded-t-lg border-b-2 border-transparent transition-all duration-200 font-medium",children:"Resource Usage"})]}),E.jsxs("div",{className:"p-6",children:[((m=a.tabs)==null?void 0:m.includes("overview"))&&E.jsx(Gp,{value:"overview",children:E.jsx(bJ,{performanceMatrix:i.performanceMatrix,benchmarkResults:i.benchmarkResults,testConfiguration:i.testConfiguration,performanceSummary:i.performanceSummary,latencyPercentileComparison:i.latencyPercentileComparison})}),((f=a.tabs)==null?void 0:f.includes("latency"))&&E.jsx(Gp,{value:"latency",children:E.jsx(SJ,{latencyPercentileComparison:i.latencyPercentileComparison,benchmarkResults:i.benchmarkResults})}),((d=a.tabs)==null?void 0:d.includes("resources"))&&E.jsx(Gp,{value:"resources",children:E.jsx(PJ,{resourceTrends:i.resourceTrends,benchmarkResults:i.benchmarkResults})})]})]})})]})};class JA{static async getAllCSS(){const t="shadow-dom-css";if(this.cssCache.has(t))return this.cssCache.get(t);try{let n="";const r=this.getBundledCSS();if(r){n=this.transformCSSForShadowDOM(r);const a=` ${this.getShadowDOMStyles()} ${n} `;return this.cssCache.set(t,a),a}else{const a=this.getFallbackCSS();return this.cssCache.set(t,a),a}}catch(n){return console.error("Error loading CSS for Shadow DOM:",n),this.getFallbackCSS()}}static getBundledCSS(){return window.__BENCHMARK_CSS__||null}static getCSSVariables(){return` @@ -574,7 +574,7 @@ ${n.map(([o,i])=>{var u;const s=((u=i.theme)==null?void 0:u[r])||i.color;return @media (min-width: 640px) { .sm\\:text-base { font-size: 1rem !important; line-height: 1.5rem !important; } } - `}}x5(bP,"cssCache",new Map);var W1=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},oo,ia,wi,s7,Tse=(s7=class extends W1{constructor(){super();me(this,oo);me(this,ia);me(this,wi);te(this,wi,t=>{if(typeof window<"u"&&window.addEventListener){const n=()=>t();return window.addEventListener("visibilitychange",n,!1),()=>{window.removeEventListener("visibilitychange",n)}}})}onSubscribe(){G(this,ia)||this.setEventListener(G(this,wi))}onUnsubscribe(){var t;this.hasListeners()||((t=G(this,ia))==null||t.call(this),te(this,ia,void 0))}setEventListener(t){var n;te(this,wi,t),(n=G(this,ia))==null||n.call(this),te(this,ia,t(r=>{typeof r=="boolean"?this.setFocused(r):this.onFocus()}))}setFocused(t){G(this,oo)!==t&&(te(this,oo,t),this.onFocus())}onFocus(){const t=this.isFocused();this.listeners.forEach(n=>{n(t)})}isFocused(){var t;return typeof G(this,oo)=="boolean"?G(this,oo):((t=globalThis.document)==null?void 0:t.visibilityState)!=="hidden"}},oo=new WeakMap,ia=new WeakMap,wi=new WeakMap,s7),SP=new Tse,jse={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},sa,Xf,u7,Rse=(u7=class{constructor(){me(this,sa,jse);me(this,Xf,!1)}setTimeoutProvider(e){te(this,sa,e)}setTimeout(e,t){return G(this,sa).setTimeout(e,t)}clearTimeout(e){G(this,sa).clearTimeout(e)}setInterval(e,t){return G(this,sa).setInterval(e,t)}clearInterval(e){G(this,sa).clearInterval(e)}},sa=new WeakMap,Xf=new WeakMap,u7),zf=new Rse;function $se(e){setTimeout(e,0)}var Mse=typeof window>"u"||"Deno"in globalThis;function Nn(){}function qse(e,t){return typeof e=="function"?e(t):e}function Ise(e){return typeof e=="number"&&e>=0&&e!==1/0}function Dse(e,t){return Math.max(e+(t||0)-Date.now(),0)}function Uf(e,t){return typeof e=="function"?e(t):e}function Lse(e,t){return typeof e=="function"?e(t):e}function Qy(e,t){const{type:n="all",exact:r,fetchStatus:a,predicate:o,queryKey:i,stale:s}=e;if(i){if(r){if(t.queryHash!==d5(i,t.options))return!1}else if(!bl(t.queryKey,i))return!1}if(n!=="all"){const u=t.isActive();if(n==="active"&&!u||n==="inactive"&&u)return!1}return!(typeof s=="boolean"&&t.isStale()!==s||a&&a!==t.state.fetchStatus||o&&!o(t))}function Zy(e,t){const{exact:n,status:r,predicate:a,mutationKey:o}=e;if(o){if(!t.options.mutationKey)return!1;if(n){if(wl(t.options.mutationKey)!==wl(o))return!1}else if(!bl(t.options.mutationKey,o))return!1}return!(r&&t.state.status!==r||a&&!a(t))}function d5(e,t){return((t==null?void 0:t.queryKeyHashFn)||wl)(e)}function wl(e){return JSON.stringify(e,(t,n)=>Wf(n)?Object.keys(n).sort().reduce((r,a)=>(r[a]=n[a],r),{}):n)}function bl(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?Object.keys(t).every(n=>bl(e[n],t[n])):!1}var Hse=Object.prototype.hasOwnProperty;function PP(e,t,n=0){if(e===t)return e;if(n>500)return t;const r=Jy(e)&&Jy(t);if(!r&&!(Wf(e)&&Wf(t)))return t;const o=(r?e:Object.keys(e)).length,i=r?t:Object.keys(t),s=i.length,u=r?new Array(s):{};let l=0;for(let p=0;p{zf.setTimeout(t,e)})}function Bse(e,t,n){return typeof n.structuralSharing=="function"?n.structuralSharing(e,t):n.structuralSharing!==!1?PP(e,t):t}function Fse(e,t,n=0){const r=[...e,t];return n&&r.length>n?r.slice(1):r}function zse(e,t,n=0){const r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var f5=Symbol();function OP(e,t){return!e.queryFn&&(t!=null&&t.initialPromise)?()=>t.initialPromise:!e.queryFn||e.queryFn===f5?()=>Promise.reject(new Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function Use(e,t,n){let r=!1,a;return Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(a??(a=t()),r||(r=!0,a.aborted?n():a.addEventListener("abort",n,{once:!0})),a)}),e}var kP=(()=>{let e=()=>Mse;return{isServer(){return e()},setIsServer(t){e=t}}})();function Wse(){let e,t;const n=new Promise((a,o)=>{e=a,t=o});n.status="pending",n.catch(()=>{});function r(a){Object.assign(n,a),delete n.resolve,delete n.reject}return n.resolve=a=>{r({status:"fulfilled",value:a}),e(a)},n.reject=a=>{r({status:"rejected",reason:a}),t(a)},n}var Vse=$se;function Kse(){let e=[],t=0,n=s=>{s()},r=s=>{s()},a=Vse;const o=s=>{t?e.push(s):a(()=>{n(s)})},i=()=>{const s=e;e=[],s.length&&a(()=>{r(()=>{s.forEach(u=>{n(u)})})})};return{batch:s=>{let u;t++;try{u=s()}finally{t--,t||i()}return u},batchCalls:s=>(...u)=>{o(()=>{s(...u)})},schedule:o,setNotifyFunction:s=>{n=s},setBatchNotifyFunction:s=>{r=s},setScheduler:s=>{a=s}}}var $t=Kse(),bi,ua,Si,l7,Xse=(l7=class extends W1{constructor(){super();me(this,bi,!0);me(this,ua);me(this,Si);te(this,Si,t=>{if(typeof window<"u"&&window.addEventListener){const n=()=>t(!0),r=()=>t(!1);return window.addEventListener("online",n,!1),window.addEventListener("offline",r,!1),()=>{window.removeEventListener("online",n),window.removeEventListener("offline",r)}}})}onSubscribe(){G(this,ua)||this.setEventListener(G(this,Si))}onUnsubscribe(){var t;this.hasListeners()||((t=G(this,ua))==null||t.call(this),te(this,ua,void 0))}setEventListener(t){var n;te(this,Si,t),(n=G(this,ua))==null||n.call(this),te(this,ua,t(this.setOnline.bind(this)))}setOnline(t){G(this,bi)!==t&&(te(this,bi,t),this.listeners.forEach(r=>{r(t)}))}isOnline(){return G(this,bi)}},bi=new WeakMap,ua=new WeakMap,Si=new WeakMap,l7),A0=new Xse;function Yse(e){return Math.min(1e3*2**e,3e4)}function CP(e){return(e??"online")==="online"?A0.isOnline():!0}var Vf=class extends Error{constructor(e){super("CancelledError"),this.revert=e==null?void 0:e.revert,this.silent=e==null?void 0:e.silent}};function AP(e){let t=!1,n=0,r;const a=Wse(),o=()=>a.status!=="pending",i=f=>{var y;if(!o()){const v=new Vf(f);m(v),(y=e.onCancel)==null||y.call(e,v)}},s=()=>{t=!0},u=()=>{t=!1},l=()=>SP.isFocused()&&(e.networkMode==="always"||A0.isOnline())&&e.canRun(),p=()=>CP(e.networkMode)&&e.canRun(),c=f=>{o()||(r==null||r(),a.resolve(f))},m=f=>{o()||(r==null||r(),a.reject(f))},d=()=>new Promise(f=>{var y;r=v=>{(o()||l())&&f(v)},(y=e.onPause)==null||y.call(e)}).then(()=>{var f;r=void 0,o()||(f=e.onContinue)==null||f.call(e)}),g=()=>{if(o())return;let f;const y=n===0?e.initialPromise:void 0;try{f=y??e.fn()}catch(v){f=Promise.reject(v)}Promise.resolve(f).then(c).catch(v=>{var S;if(o())return;const h=e.retry??(kP.isServer()?0:3),_=e.retryDelay??Yse,w=typeof _=="function"?_(n,v):_,x=h===!0||typeof h=="number"&&nl()?void 0:d()).then(()=>{t?m(v):g()})})};return{promise:a,status:()=>a.status,cancel:i,continue:()=>(r==null||r(),a),cancelRetry:s,continueRetry:u,canStart:p,start:()=>(p()?g():d().then(g),a)}}var io,c7,EP=(c7=class{constructor(){me(this,io)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),Ise(this.gcTime)&&te(this,io,zf.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(kP.isServer()?1/0:5*60*1e3))}clearGcTimeout(){G(this,io)!==void 0&&(zf.clearTimeout(G(this,io)),te(this,io,void 0))}},io=new WeakMap,c7),so,Pi,dn,uo,lt,Sl,lo,Zt,NP,xr,p7,Qse=(p7=class extends EP{constructor(t){super();me(this,Zt);me(this,so);me(this,Pi);me(this,dn);me(this,uo);me(this,lt);me(this,Sl);me(this,lo);te(this,lo,!1),te(this,Sl,t.defaultOptions),this.setOptions(t.options),this.observers=[],te(this,uo,t.client),te(this,dn,G(this,uo).getQueryCache()),this.queryKey=t.queryKey,this.queryHash=t.queryHash,te(this,so,n7(this.options)),this.state=t.state??G(this,so),this.scheduleGc()}get meta(){return this.options.meta}get promise(){var t;return(t=G(this,lt))==null?void 0:t.promise}setOptions(t){if(this.options={...G(this,Sl),...t},this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){const n=n7(this.options);n.data!==void 0&&(this.setState(t7(n.data,n.dataUpdatedAt)),te(this,so,n))}}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&G(this,dn).remove(this)}setData(t,n){const r=Bse(this.state.data,t,this.options);return ft(this,Zt,xr).call(this,{data:r,type:"success",dataUpdatedAt:n==null?void 0:n.updatedAt,manual:n==null?void 0:n.manual}),r}setState(t,n){ft(this,Zt,xr).call(this,{type:"setState",state:t,setStateOptions:n})}cancel(t){var r,a;const n=(r=G(this,lt))==null?void 0:r.promise;return(a=G(this,lt))==null||a.cancel(t),n?n.then(Nn).catch(Nn):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return G(this,so)}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(t=>Lse(t.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===f5||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0?this.observers.some(t=>Uf(t.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(t=>t.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(t=0){return this.state.data===void 0?!0:t==="static"?!1:this.state.isInvalidated?!0:!Dse(this.state.dataUpdatedAt,t)}onFocus(){var n;const t=this.observers.find(r=>r.shouldFetchOnWindowFocus());t==null||t.refetch({cancelRefetch:!1}),(n=G(this,lt))==null||n.continue()}onOnline(){var n;const t=this.observers.find(r=>r.shouldFetchOnReconnect());t==null||t.refetch({cancelRefetch:!1}),(n=G(this,lt))==null||n.continue()}addObserver(t){this.observers.includes(t)||(this.observers.push(t),this.clearGcTimeout(),G(this,dn).notify({type:"observerAdded",query:this,observer:t}))}removeObserver(t){this.observers.includes(t)&&(this.observers=this.observers.filter(n=>n!==t),this.observers.length||(G(this,lt)&&(G(this,lo)||ft(this,Zt,NP).call(this)?G(this,lt).cancel({revert:!0}):G(this,lt).cancelRetry()),this.scheduleGc()),G(this,dn).notify({type:"observerRemoved",query:this,observer:t}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||ft(this,Zt,xr).call(this,{type:"invalidate"})}async fetch(t,n){var u,l,p,c,m,d,g,f,y,v,h,_;if(this.state.fetchStatus!=="idle"&&((u=G(this,lt))==null?void 0:u.status())!=="rejected"){if(this.state.data!==void 0&&(n!=null&&n.cancelRefetch))this.cancel({silent:!0});else if(G(this,lt))return G(this,lt).continueRetry(),G(this,lt).promise}if(t&&this.setOptions(t),!this.options.queryFn){const w=this.observers.find(x=>x.options.queryFn);w&&this.setOptions(w.options)}const r=new AbortController,a=w=>{Object.defineProperty(w,"signal",{enumerable:!0,get:()=>(te(this,lo,!0),r.signal)})},o=()=>{const w=OP(this.options,n),S=(()=>{const O={client:G(this,uo),queryKey:this.queryKey,meta:this.meta};return a(O),O})();return te(this,lo,!1),this.options.persister?this.options.persister(w,S,this):w(S)},s=(()=>{const w={fetchOptions:n,options:this.options,queryKey:this.queryKey,client:G(this,uo),state:this.state,fetchFn:o};return a(w),w})();(l=this.options.behavior)==null||l.onFetch(s,this),te(this,Pi,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((p=s.fetchOptions)==null?void 0:p.meta))&&ft(this,Zt,xr).call(this,{type:"fetch",meta:(c=s.fetchOptions)==null?void 0:c.meta}),te(this,lt,AP({initialPromise:n==null?void 0:n.initialPromise,fn:s.fetchFn,onCancel:w=>{w instanceof Vf&&w.revert&&this.setState({...G(this,Pi),fetchStatus:"idle"}),r.abort()},onFail:(w,x)=>{ft(this,Zt,xr).call(this,{type:"failed",failureCount:w,error:x})},onPause:()=>{ft(this,Zt,xr).call(this,{type:"pause"})},onContinue:()=>{ft(this,Zt,xr).call(this,{type:"continue"})},retry:s.options.retry,retryDelay:s.options.retryDelay,networkMode:s.options.networkMode,canRun:()=>!0}));try{const w=await G(this,lt).start();if(w===void 0)throw new Error(`${this.queryHash} data is undefined`);return this.setData(w),(d=(m=G(this,dn).config).onSuccess)==null||d.call(m,w,this),(f=(g=G(this,dn).config).onSettled)==null||f.call(g,w,this.state.error,this),w}catch(w){if(w instanceof Vf){if(w.silent)return G(this,lt).promise;if(w.revert){if(this.state.data===void 0)throw w;return this.state.data}}throw ft(this,Zt,xr).call(this,{type:"error",error:w}),(v=(y=G(this,dn).config).onError)==null||v.call(y,w,this),(_=(h=G(this,dn).config).onSettled)==null||_.call(h,this.state.data,w,this),w}finally{this.scheduleGc()}}},so=new WeakMap,Pi=new WeakMap,dn=new WeakMap,uo=new WeakMap,lt=new WeakMap,Sl=new WeakMap,lo=new WeakMap,Zt=new WeakSet,NP=function(){return this.state.fetchStatus==="paused"&&this.state.status==="pending"},xr=function(t){const n=r=>{switch(t.type){case"failed":return{...r,fetchFailureCount:t.failureCount,fetchFailureReason:t.error};case"pause":return{...r,fetchStatus:"paused"};case"continue":return{...r,fetchStatus:"fetching"};case"fetch":return{...r,...Zse(r.data,this.options),fetchMeta:t.meta??null};case"success":const a={...r,...t7(t.data,t.dataUpdatedAt),dataUpdateCount:r.dataUpdateCount+1,...!t.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};return te(this,Pi,t.manual?a:void 0),a;case"error":const o=t.error;return{...r,error:o,errorUpdateCount:r.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:r.fetchFailureCount+1,fetchFailureReason:o,fetchStatus:"idle",status:"error",isInvalidated:!0};case"invalidate":return{...r,isInvalidated:!0};case"setState":return{...r,...t.state}}};this.state=n(this.state),$t.batch(()=>{this.observers.forEach(r=>{r.onQueryUpdate()}),G(this,dn).notify({query:this,type:"updated",action:t})})},p7);function Zse(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:CP(t.networkMode)?"fetching":"paused",...e===void 0&&{error:null,status:"pending"}}}function t7(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:"success"}}function n7(e){const t=typeof e.initialData=="function"?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt=="function"?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?"success":"pending",fetchStatus:"idle"}}function r7(e){return{onFetch:(t,n)=>{var p,c,m,d,g;const r=t.options,a=(m=(c=(p=t.fetchOptions)==null?void 0:p.meta)==null?void 0:c.fetchMore)==null?void 0:m.direction,o=((d=t.state.data)==null?void 0:d.pages)||[],i=((g=t.state.data)==null?void 0:g.pageParams)||[];let s={pages:[],pageParams:[]},u=0;const l=async()=>{let f=!1;const y=_=>{Use(_,()=>t.signal,()=>f=!0)},v=OP(t.options,t.fetchOptions),h=async(_,w,x)=>{if(f)return Promise.reject();if(w==null&&_.pages.length)return Promise.resolve(_);const O=(()=>{const T={client:t.client,queryKey:t.queryKey,pageParam:w,direction:x?"backward":"forward",meta:t.options.meta};return y(T),T})(),k=await v(O),{maxPages:C}=t.options,N=x?zse:Fse;return{pages:N(_.pages,k,C),pageParams:N(_.pageParams,w,C)}};if(a&&o.length){const _=a==="backward",w=_?Jse:a7,x={pages:o,pageParams:i},S=w(r,x);s=await h(x,S,_)}else{const _=e??o.length;do{const w=u===0?i[0]??r.initialPageParam:a7(r,s);if(u>0&&w==null)break;s=await h(s,w),u++}while(u<_)}return s};t.options.persister?t.fetchFn=()=>{var f,y;return(y=(f=t.options).persister)==null?void 0:y.call(f,l,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n)}:t.fetchFn=l}}}function a7(e,{pages:t,pageParams:n}){const r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function Jse(e,{pages:t,pageParams:n}){var r;return t.length>0?(r=e.getPreviousPageParam)==null?void 0:r.call(e,t[0],t,n[0],n):void 0}var Pl,Jn,Ot,co,er,Jr,m7,eue=(m7=class extends EP{constructor(t){super();me(this,er);me(this,Pl);me(this,Jn);me(this,Ot);me(this,co);te(this,Pl,t.client),this.mutationId=t.mutationId,te(this,Ot,t.mutationCache),te(this,Jn,[]),this.state=t.state||tue(),this.setOptions(t.options),this.scheduleGc()}setOptions(t){this.options=t,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(t){G(this,Jn).includes(t)||(G(this,Jn).push(t),this.clearGcTimeout(),G(this,Ot).notify({type:"observerAdded",mutation:this,observer:t}))}removeObserver(t){te(this,Jn,G(this,Jn).filter(n=>n!==t)),this.scheduleGc(),G(this,Ot).notify({type:"observerRemoved",mutation:this,observer:t})}optionalRemove(){G(this,Jn).length||(this.state.status==="pending"?this.scheduleGc():G(this,Ot).remove(this))}continue(){var t;return((t=G(this,co))==null?void 0:t.continue())??this.execute(this.state.variables)}async execute(t){var i,s,u,l,p,c,m,d,g,f,y,v,h,_,w,x,S,O;const n=()=>{ft(this,er,Jr).call(this,{type:"continue"})},r={client:G(this,Pl),meta:this.options.meta,mutationKey:this.options.mutationKey};te(this,co,AP({fn:()=>this.options.mutationFn?this.options.mutationFn(t,r):Promise.reject(new Error("No mutationFn found")),onFail:(k,C)=>{ft(this,er,Jr).call(this,{type:"failed",failureCount:k,error:C})},onPause:()=>{ft(this,er,Jr).call(this,{type:"pause"})},onContinue:n,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>G(this,Ot).canRun(this)}));const a=this.state.status==="pending",o=!G(this,co).canStart();try{if(a)n();else{ft(this,er,Jr).call(this,{type:"pending",variables:t,isPaused:o}),G(this,Ot).config.onMutate&&await G(this,Ot).config.onMutate(t,this,r);const C=await((s=(i=this.options).onMutate)==null?void 0:s.call(i,t,r));C!==this.state.context&&ft(this,er,Jr).call(this,{type:"pending",context:C,variables:t,isPaused:o})}const k=await G(this,co).start();return await((l=(u=G(this,Ot).config).onSuccess)==null?void 0:l.call(u,k,t,this.state.context,this,r)),await((c=(p=this.options).onSuccess)==null?void 0:c.call(p,k,t,this.state.context,r)),await((d=(m=G(this,Ot).config).onSettled)==null?void 0:d.call(m,k,null,this.state.variables,this.state.context,this,r)),await((f=(g=this.options).onSettled)==null?void 0:f.call(g,k,null,t,this.state.context,r)),ft(this,er,Jr).call(this,{type:"success",data:k}),k}catch(k){try{await((v=(y=G(this,Ot).config).onError)==null?void 0:v.call(y,k,t,this.state.context,this,r))}catch(C){Promise.reject(C)}try{await((_=(h=this.options).onError)==null?void 0:_.call(h,k,t,this.state.context,r))}catch(C){Promise.reject(C)}try{await((x=(w=G(this,Ot).config).onSettled)==null?void 0:x.call(w,void 0,k,this.state.variables,this.state.context,this,r))}catch(C){Promise.reject(C)}try{await((O=(S=this.options).onSettled)==null?void 0:O.call(S,void 0,k,t,this.state.context,r))}catch(C){Promise.reject(C)}throw ft(this,er,Jr).call(this,{type:"error",error:k}),k}finally{G(this,Ot).runNext(this)}}},Pl=new WeakMap,Jn=new WeakMap,Ot=new WeakMap,co=new WeakMap,er=new WeakSet,Jr=function(t){const n=r=>{switch(t.type){case"failed":return{...r,failureCount:t.failureCount,failureReason:t.error};case"pause":return{...r,isPaused:!0};case"continue":return{...r,isPaused:!1};case"pending":return{...r,context:t.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:t.isPaused,status:"pending",variables:t.variables,submittedAt:Date.now()};case"success":return{...r,data:t.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...r,data:void 0,error:t.error,failureCount:r.failureCount+1,failureReason:t.error,isPaused:!1,status:"error"}}};this.state=n(this.state),$t.batch(()=>{G(this,Jn).forEach(r=>{r.onMutationUpdate(t)}),G(this,Ot).notify({mutation:this,type:"updated",action:t})})},m7);function tue(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var Sr,Tn,Ol,d7,nue=(d7=class extends W1{constructor(t={}){super();me(this,Sr);me(this,Tn);me(this,Ol);this.config=t,te(this,Sr,new Set),te(this,Tn,new Map),te(this,Ol,0)}build(t,n,r){const a=new eue({client:t,mutationCache:this,mutationId:++Bl(this,Ol)._,options:t.defaultMutationOptions(n),state:r});return this.add(a),a}add(t){G(this,Sr).add(t);const n=Cc(t);if(typeof n=="string"){const r=G(this,Tn).get(n);r?r.push(t):G(this,Tn).set(n,[t])}this.notify({type:"added",mutation:t})}remove(t){if(G(this,Sr).delete(t)){const n=Cc(t);if(typeof n=="string"){const r=G(this,Tn).get(n);if(r)if(r.length>1){const a=r.indexOf(t);a!==-1&&r.splice(a,1)}else r[0]===t&&G(this,Tn).delete(n)}}this.notify({type:"removed",mutation:t})}canRun(t){const n=Cc(t);if(typeof n=="string"){const r=G(this,Tn).get(n),a=r==null?void 0:r.find(o=>o.state.status==="pending");return!a||a===t}else return!0}runNext(t){var r;const n=Cc(t);if(typeof n=="string"){const a=(r=G(this,Tn).get(n))==null?void 0:r.find(o=>o!==t&&o.state.isPaused);return(a==null?void 0:a.continue())??Promise.resolve()}else return Promise.resolve()}clear(){$t.batch(()=>{G(this,Sr).forEach(t=>{this.notify({type:"removed",mutation:t})}),G(this,Sr).clear(),G(this,Tn).clear()})}getAll(){return Array.from(G(this,Sr))}find(t){const n={exact:!0,...t};return this.getAll().find(r=>Zy(n,r))}findAll(t={}){return this.getAll().filter(n=>Zy(t,n))}notify(t){$t.batch(()=>{this.listeners.forEach(n=>{n(t)})})}resumePausedMutations(){const t=this.getAll().filter(n=>n.state.isPaused);return $t.batch(()=>Promise.all(t.map(n=>n.continue().catch(Nn))))}},Sr=new WeakMap,Tn=new WeakMap,Ol=new WeakMap,d7);function Cc(e){var t;return(t=e.options.scope)==null?void 0:t.id}var tr,f7,rue=(f7=class extends W1{constructor(t={}){super();me(this,tr);this.config=t,te(this,tr,new Map)}build(t,n,r){const a=n.queryKey,o=n.queryHash??d5(a,n);let i=this.get(o);return i||(i=new Qse({client:t,queryKey:a,queryHash:o,options:t.defaultQueryOptions(n),state:r,defaultOptions:t.getQueryDefaults(a)}),this.add(i)),i}add(t){G(this,tr).has(t.queryHash)||(G(this,tr).set(t.queryHash,t),this.notify({type:"added",query:t}))}remove(t){const n=G(this,tr).get(t.queryHash);n&&(t.destroy(),n===t&&G(this,tr).delete(t.queryHash),this.notify({type:"removed",query:t}))}clear(){$t.batch(()=>{this.getAll().forEach(t=>{this.remove(t)})})}get(t){return G(this,tr).get(t)}getAll(){return[...G(this,tr).values()]}find(t){const n={exact:!0,...t};return this.getAll().find(r=>Qy(n,r))}findAll(t={}){const n=this.getAll();return Object.keys(t).length>0?n.filter(r=>Qy(t,r)):n}notify(t){$t.batch(()=>{this.listeners.forEach(n=>{n(t)})})}onFocus(){$t.batch(()=>{this.getAll().forEach(t=>{t.onFocus()})})}onOnline(){$t.batch(()=>{this.getAll().forEach(t=>{t.onOnline()})})}},tr=new WeakMap,f7),Ue,la,ca,Oi,ki,pa,Ci,Ai,v7,aue=(v7=class{constructor(e={}){me(this,Ue);me(this,la);me(this,ca);me(this,Oi);me(this,ki);me(this,pa);me(this,Ci);me(this,Ai);te(this,Ue,e.queryCache||new rue),te(this,la,e.mutationCache||new nue),te(this,ca,e.defaultOptions||{}),te(this,Oi,new Map),te(this,ki,new Map),te(this,pa,0)}mount(){Bl(this,pa)._++,G(this,pa)===1&&(te(this,Ci,SP.subscribe(async e=>{e&&(await this.resumePausedMutations(),G(this,Ue).onFocus())})),te(this,Ai,A0.subscribe(async e=>{e&&(await this.resumePausedMutations(),G(this,Ue).onOnline())})))}unmount(){var e,t;Bl(this,pa)._--,G(this,pa)===0&&((e=G(this,Ci))==null||e.call(this),te(this,Ci,void 0),(t=G(this,Ai))==null||t.call(this),te(this,Ai,void 0))}isFetching(e){return G(this,Ue).findAll({...e,fetchStatus:"fetching"}).length}isMutating(e){return G(this,la).findAll({...e,status:"pending"}).length}getQueryData(e){var n;const t=this.defaultQueryOptions({queryKey:e});return(n=G(this,Ue).get(t.queryHash))==null?void 0:n.state.data}ensureQueryData(e){const t=this.defaultQueryOptions(e),n=G(this,Ue).build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(Uf(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return G(this,Ue).findAll(e).map(({queryKey:t,state:n})=>{const r=n.data;return[t,r]})}setQueryData(e,t,n){const r=this.defaultQueryOptions({queryKey:e}),a=G(this,Ue).get(r.queryHash),o=a==null?void 0:a.state.data,i=qse(t,o);if(i!==void 0)return G(this,Ue).build(this,r).setData(i,{...n,manual:!0})}setQueriesData(e,t,n){return $t.batch(()=>G(this,Ue).findAll(e).map(({queryKey:r})=>[r,this.setQueryData(r,t,n)]))}getQueryState(e){var n;const t=this.defaultQueryOptions({queryKey:e});return(n=G(this,Ue).get(t.queryHash))==null?void 0:n.state}removeQueries(e){const t=G(this,Ue);$t.batch(()=>{t.findAll(e).forEach(n=>{t.remove(n)})})}resetQueries(e,t){const n=G(this,Ue);return $t.batch(()=>(n.findAll(e).forEach(r=>{r.reset()}),this.refetchQueries({type:"active",...e},t)))}cancelQueries(e,t={}){const n={revert:!0,...t},r=$t.batch(()=>G(this,Ue).findAll(e).map(a=>a.cancel(n)));return Promise.all(r).then(Nn).catch(Nn)}invalidateQueries(e,t={}){return $t.batch(()=>(G(this,Ue).findAll(e).forEach(n=>{n.invalidate()}),(e==null?void 0:e.refetchType)==="none"?Promise.resolve():this.refetchQueries({...e,type:(e==null?void 0:e.refetchType)??(e==null?void 0:e.type)??"active"},t)))}refetchQueries(e,t={}){const n={...t,cancelRefetch:t.cancelRefetch??!0},r=$t.batch(()=>G(this,Ue).findAll(e).filter(a=>!a.isDisabled()&&!a.isStatic()).map(a=>{let o=a.fetch(void 0,n);return n.throwOnError||(o=o.catch(Nn)),a.state.fetchStatus==="paused"?Promise.resolve():o}));return Promise.all(r).then(Nn)}fetchQuery(e){const t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);const n=G(this,Ue).build(this,t);return n.isStaleByTime(Uf(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(Nn).catch(Nn)}fetchInfiniteQuery(e){return e.behavior=r7(e.pages),this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(Nn).catch(Nn)}ensureInfiniteQueryData(e){return e.behavior=r7(e.pages),this.ensureQueryData(e)}resumePausedMutations(){return A0.isOnline()?G(this,la).resumePausedMutations():Promise.resolve()}getQueryCache(){return G(this,Ue)}getMutationCache(){return G(this,la)}getDefaultOptions(){return G(this,ca)}setDefaultOptions(e){te(this,ca,e)}setQueryDefaults(e,t){G(this,Oi).set(wl(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){const t=[...G(this,Oi).values()],n={};return t.forEach(r=>{bl(e,r.queryKey)&&Object.assign(n,r.defaultOptions)}),n}setMutationDefaults(e,t){G(this,ki).set(wl(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){const t=[...G(this,ki).values()],n={};return t.forEach(r=>{bl(e,r.mutationKey)&&Object.assign(n,r.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;const t={...G(this,ca).queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||(t.queryHash=d5(t.queryKey,t)),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!=="always"),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode="offlineFirst"),t.queryFn===f5&&(t.enabled=!1),t}defaultMutationOptions(e){return e!=null&&e._defaulted?e:{...G(this,ca).mutations,...(e==null?void 0:e.mutationKey)&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){G(this,Ue).clear(),G(this,la).clear()}},Ue=new WeakMap,la=new WeakMap,ca=new WeakMap,Oi=new WeakMap,ki=new WeakMap,pa=new WeakMap,Ci=new WeakMap,Ai=new WeakMap,v7),oue=P.createContext(void 0),iue=({client:e,children:t})=>(P.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),b.jsx(oue.Provider,{value:e,children:t})),sue=Symbol("radix.slottable");function uue(e){const t=({children:n})=>b.jsx(b.Fragment,{children:n});return t.displayName=`${e}.Slottable`,t.__radixId=sue,t}var[V1]=fs("Tooltip",[X0]),v5=X0(),TP="TooltipProvider",lue=700,o7="tooltip.open",[cue,jP]=V1(TP),RP=e=>{const{__scopeTooltip:t,delayDuration:n=lue,skipDelayDuration:r=300,disableHoverableContent:a=!1,children:o}=e,i=P.useRef(!0),s=P.useRef(!1),u=P.useRef(0);return P.useEffect(()=>{const l=u.current;return()=>window.clearTimeout(l)},[]),b.jsx(cue,{scope:t,isOpenDelayedRef:i,delayDuration:n,onOpen:P.useCallback(()=>{window.clearTimeout(u.current),i.current=!1},[]),onClose:P.useCallback(()=>{window.clearTimeout(u.current),u.current=window.setTimeout(()=>i.current=!0,r)},[r]),isPointerInTransitRef:s,onPointerInTransitChange:P.useCallback(l=>{s.current=l},[]),disableHoverableContent:a,children:o})};RP.displayName=TP;var $P="Tooltip",[Tue,K1]=V1($P),Kf="TooltipTrigger",pue=P.forwardRef((e,t)=>{const{__scopeTooltip:n,...r}=e,a=K1(Kf,n),o=jP(Kf,n),i=v5(n),s=P.useRef(null),u=Qe(t,s,a.onTriggerChange),l=P.useRef(!1),p=P.useRef(!1),c=P.useCallback(()=>l.current=!1,[]);return P.useEffect(()=>()=>document.removeEventListener("pointerup",c),[c]),b.jsx(e_,{asChild:!0,...i,children:b.jsx(Ee.button,{"aria-describedby":a.open?a.contentId:void 0,"data-state":a.stateAttribute,...r,ref:u,onPointerMove:de(e.onPointerMove,m=>{m.pointerType!=="touch"&&!p.current&&!o.isPointerInTransitRef.current&&(a.onTriggerEnter(),p.current=!0)}),onPointerLeave:de(e.onPointerLeave,()=>{a.onTriggerLeave(),p.current=!1}),onPointerDown:de(e.onPointerDown,()=>{a.open&&a.onClose(),l.current=!0,document.addEventListener("pointerup",c,{once:!0})}),onFocus:de(e.onFocus,()=>{l.current||a.onOpen()}),onBlur:de(e.onBlur,a.onClose),onClick:de(e.onClick,a.onClose)})})});pue.displayName=Kf;var mue="TooltipPortal",[jue,due]=V1(mue,{forceMount:void 0}),ls="TooltipContent",MP=P.forwardRef((e,t)=>{const n=due(ls,e.__scopeTooltip),{forceMount:r=n.forceMount,side:a="top",...o}=e,i=K1(ls,e.__scopeTooltip);return b.jsx(c5,{present:r||i.open,children:i.disableHoverableContent?b.jsx(qP,{side:a,...o,ref:t}):b.jsx(fue,{side:a,...o,ref:t})})}),fue=P.forwardRef((e,t)=>{const n=K1(ls,e.__scopeTooltip),r=jP(ls,e.__scopeTooltip),a=P.useRef(null),o=Qe(t,a),[i,s]=P.useState(null),{trigger:u,onClose:l}=n,p=a.current,{onPointerInTransitChange:c}=r,m=P.useCallback(()=>{s(null),c(!1)},[c]),d=P.useCallback((g,f)=>{const y=g.currentTarget,v={x:g.clientX,y:g.clientY},h=_ue(v,y.getBoundingClientRect()),_=xue(v,h),w=wue(f.getBoundingClientRect()),x=Sue([..._,...w]);s(x),c(!0)},[c]);return P.useEffect(()=>()=>m(),[m]),P.useEffect(()=>{if(u&&p){const g=y=>d(y,p),f=y=>d(y,u);return u.addEventListener("pointerleave",g),p.addEventListener("pointerleave",f),()=>{u.removeEventListener("pointerleave",g),p.removeEventListener("pointerleave",f)}}},[u,p,d,m]),P.useEffect(()=>{if(i){const g=f=>{const y=f.target,v={x:f.clientX,y:f.clientY},h=(u==null?void 0:u.contains(y))||(p==null?void 0:p.contains(y)),_=!bue(v,i);h?m():_&&(m(),l())};return document.addEventListener("pointermove",g),()=>document.removeEventListener("pointermove",g)}},[u,p,i,l,m]),b.jsx(qP,{...e,ref:o})}),[vue,hue]=V1($P,{isInside:!1}),yue=uue("TooltipContent"),qP=P.forwardRef((e,t)=>{const{__scopeTooltip:n,children:r,"aria-label":a,onEscapeKeyDown:o,onPointerDownOutside:i,...s}=e,u=K1(ls,n),l=v5(n),{onClose:p}=u;return P.useEffect(()=>(document.addEventListener(o7,p),()=>document.removeEventListener(o7,p)),[p]),P.useEffect(()=>{if(u.trigger){const c=m=>{const d=m.target;d!=null&&d.contains(u.trigger)&&p()};return window.addEventListener("scroll",c,{capture:!0}),()=>window.removeEventListener("scroll",c,{capture:!0})}},[u.trigger,p]),b.jsx(W4,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:o,onPointerDownOutside:i,onFocusOutside:c=>c.preventDefault(),onDismiss:p,children:b.jsxs(t_,{"data-state":u.stateAttribute,...l,...s,ref:t,style:{...s.style,"--radix-tooltip-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-tooltip-content-available-width":"var(--radix-popper-available-width)","--radix-tooltip-content-available-height":"var(--radix-popper-available-height)","--radix-tooltip-trigger-width":"var(--radix-popper-anchor-width)","--radix-tooltip-trigger-height":"var(--radix-popper-anchor-height)"},children:[b.jsx(yue,{children:r}),b.jsx(vue,{scope:n,isInside:!0,children:b.jsx(_E,{id:u.contentId,role:"tooltip",children:a||r})})]})})});MP.displayName=ls;var IP="TooltipArrow",gue=P.forwardRef((e,t)=>{const{__scopeTooltip:n,...r}=e,a=v5(n);return hue(IP,n).isInside?null:b.jsx(n_,{...a,...r,ref:t})});gue.displayName=IP;function _ue(e,t){const n=Math.abs(t.top-e.y),r=Math.abs(t.bottom-e.y),a=Math.abs(t.right-e.x),o=Math.abs(t.left-e.x);switch(Math.min(n,r,a,o)){case o:return"left";case a:return"right";case n:return"top";case r:return"bottom";default:throw new Error("unreachable")}}function xue(e,t,n=5){const r=[];switch(t){case"top":r.push({x:e.x-n,y:e.y+n},{x:e.x+n,y:e.y+n});break;case"bottom":r.push({x:e.x-n,y:e.y-n},{x:e.x+n,y:e.y-n});break;case"left":r.push({x:e.x+n,y:e.y-n},{x:e.x+n,y:e.y+n});break;case"right":r.push({x:e.x-n,y:e.y-n},{x:e.x-n,y:e.y+n});break}return r}function wue(e){const{top:t,right:n,bottom:r,left:a}=e;return[{x:a,y:t},{x:n,y:t},{x:n,y:r},{x:a,y:r}]}function bue(e,t){const{x:n,y:r}=e;let a=!1;for(let o=0,i=t.length-1;or!=m>r&&n<(c-l)*(r-p)/(m-p)+l&&(a=!a)}return a}function Sue(e){const t=e.slice();return t.sort((n,r)=>n.xr.x?1:n.yr.y?1:0),Pue(t)}function Pue(e){if(e.length<=1)return e.slice();const t=[];for(let r=0;r=2;){const o=t[t.length-1],i=t[t.length-2];if((o.x-i.x)*(a.y-i.y)>=(o.y-i.y)*(a.x-i.x))t.pop();else break}t.push(a)}t.pop();const n=[];for(let r=e.length-1;r>=0;r--){const a=e[r];for(;n.length>=2;){const o=n[n.length-1],i=n[n.length-2];if((o.x-i.x)*(a.y-i.y)>=(o.y-i.y)*(a.x-i.x))n.pop();else break}n.push(a)}return n.pop(),t.length===1&&n.length===1&&t[0].x===n[0].x&&t[0].y===n[0].y?t:t.concat(n)}var Oue=RP,DP=MP;const kue=Oue,Cue=P.forwardRef(({className:e,sideOffset:t=4,...n},r)=>b.jsx(DP,{ref:r,sideOffset:t,className:Pe("z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",e),...n}));Cue.displayName=DP.displayName;const Aue=e=>{const t=P.useRef(null),n=P.useRef(null),r=P.useRef(null);return P.useEffect(()=>{if(t.current){try{const a=t.current.attachShadow({mode:"open"});n.current=a;const o=document.createElement("div");o.id="shadow-root",o.className="benchmark-dashboard",a.appendChild(o),bP.getAllCSS().then(i=>{const s=document.createElement("style");s.textContent=i,a.insertBefore(s,o);const u=Uc.createRoot(o);r.current=u,u.render(b.jsx(E.StrictMode,{children:b.jsx(iue,{client:new aue,children:b.jsx(kue,{children:b.jsx(Nse,{...e})})})}))}).catch(i=>{console.error("Failed to inject CSS into Shadow DOM:",i)})}catch(a){console.error("Failed to create Shadow DOM:",a)}return()=>{r.current&&r.current.unmount()}}},[]),b.jsx("div",{ref:t,style:{width:"100%",minHeight:"400px"}})},Eue=`*, ::before, ::after { + `}}t7(JA,"cssCache",new Map);var F0=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},Mo,Ua,Qi,LS,Kee=(LS=class extends F0{constructor(){super();De(this,Mo);De(this,Ua);De(this,Qi);Ee(this,Qi,t=>{if(typeof window<"u"&&window.addEventListener){const n=()=>t();return window.addEventListener("visibilitychange",n,!1),()=>{window.removeEventListener("visibilitychange",n)}}})}onSubscribe(){ne(this,Ua)||this.setEventListener(ne(this,Qi))}onUnsubscribe(){var t;this.hasListeners()||((t=ne(this,Ua))==null||t.call(this),Ee(this,Ua,void 0))}setEventListener(t){var n;Ee(this,Qi,t),(n=ne(this,Ua))==null||n.call(this),Ee(this,Ua,t(r=>{typeof r=="boolean"?this.setFocused(r):this.onFocus()}))}setFocused(t){ne(this,Mo)!==t&&(Ee(this,Mo,t),this.onFocus())}onFocus(){const t=this.isFocused();this.listeners.forEach(n=>{n(t)})}isFocused(){var t;return typeof ne(this,Mo)=="boolean"?ne(this,Mo):((t=globalThis.document)==null?void 0:t.visibilityState)!=="hidden"}},Mo=new WeakMap,Ua=new WeakMap,Qi=new WeakMap,LS),eE=new Kee,Xee={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},Wa,Mv,HS,Yee=(HS=class{constructor(){De(this,Wa,Xee);De(this,Mv,!1)}setTimeoutProvider(e){Ee(this,Wa,e)}setTimeout(e,t){return ne(this,Wa).setTimeout(e,t)}clearTimeout(e){ne(this,Wa).clearTimeout(e)}setInterval(e,t){return ne(this,Wa).setInterval(e,t)}clearInterval(e){ne(this,Wa).clearInterval(e)}},Wa=new WeakMap,Mv=new WeakMap,HS),Tv=new Yee;function Qee(e){setTimeout(e,0)}var Zee=typeof window>"u"||"Deno"in globalThis;function sr(){}function Jee(e,t){return typeof e=="function"?e(t):e}function ete(e){return typeof e=="number"&&e>=0&&e!==1/0}function tte(e,t){return Math.max(e+(t||0)-Date.now(),0)}function Nv(e,t){return typeof e=="function"?e(t):e}function nte(e,t){return typeof e=="function"?e(t):e}function RS(e,t){const{type:n="all",exact:r,fetchStatus:a,predicate:i,queryKey:u,stale:l}=e;if(u){if(r){if(t.queryHash!==uh(u,t.options))return!1}else if(!qs(t.queryKey,u))return!1}if(n!=="all"){const c=t.isActive();if(n==="active"&&!c||n==="inactive"&&c)return!1}return!(typeof l=="boolean"&&t.isStale()!==l||a&&a!==t.state.fetchStatus||i&&!i(t))}function TS(e,t){const{exact:n,status:r,predicate:a,mutationKey:i}=e;if(i){if(!t.options.mutationKey)return!1;if(n){if(zl(t.options.mutationKey)!==zl(i))return!1}else if(!qs(t.options.mutationKey,i))return!1}return!(r&&t.state.status!==r||a&&!a(t))}function uh(e,t){return((t==null?void 0:t.queryKeyHashFn)||zl)(e)}function zl(e){return JSON.stringify(e,(t,n)=>qv(n)?Object.keys(n).sort().reduce((r,a)=>(r[a]=n[a],r),{}):n)}function qs(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(e&&t&&typeof e=="object"&&typeof t=="object"){if(Array.isArray(e)&&Array.isArray(t)){for(let r=0;r500)return t;const r=NS(e)&&NS(t);if(!r&&!(qv(e)&&qv(t)))return t;const i=(r?e:Object.keys(e)).length,u=r?t:Object.keys(t),l=u.length,c=r?new Array(l):{};let m=0;for(let f=0;f{Tv.setTimeout(t,e)})}function ote(e,t,n){return typeof n.structuralSharing=="function"?n.structuralSharing(e,t):n.structuralSharing!==!1?tE(e,t):t}function ite(e,t,n=0){const r=[...e,t];return n&&r.length>n?r.slice(1):r}function ste(e,t,n=0){const r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var lh=Symbol();function nE(e,t){return!e.queryFn&&(t!=null&&t.initialPromise)?()=>t.initialPromise:!e.queryFn||e.queryFn===lh?()=>Promise.reject(new Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function ute(e,t,n){let r=!1,a;return Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(a??(a=t()),r||(r=!0,a.aborted?n():a.addEventListener("abort",n,{once:!0})),a)}),e}var rE=(()=>{let e=()=>Zee;return{isServer(){return e()},setIsServer(t){e=t}}})();function lte(){let e,t;const n=new Promise((a,i)=>{e=a,t=i});n.status="pending",n.catch(()=>{});function r(a){Object.assign(n,a),delete n.resolve,delete n.reject}return n.resolve=a=>{r({status:"fulfilled",value:a}),e(a)},n.reject=a=>{r({status:"rejected",reason:a}),t(a)},n}var cte=Qee;function pte(){let e=[],t=0,n=l=>{l()},r=l=>{l()},a=cte;const i=l=>{t?e.push(l):a(()=>{n(l)})},u=()=>{const l=e;e=[],l.length&&a(()=>{r(()=>{l.forEach(c=>{n(c)})})})};return{batch:l=>{let c;t++;try{c=l()}finally{t--,t||u()}return c},batchCalls:l=>(...c)=>{i(()=>{l(...c)})},schedule:i,setNotifyFunction:l=>{n=l},setBatchNotifyFunction:l=>{r=l},setScheduler:l=>{a=l}}}var cn=pte(),Zi,Va,Ji,GS,mte=(GS=class extends F0{constructor(){super();De(this,Zi,!0);De(this,Va);De(this,Ji);Ee(this,Ji,t=>{if(typeof window<"u"&&window.addEventListener){const n=()=>t(!0),r=()=>t(!1);return window.addEventListener("online",n,!1),window.addEventListener("offline",r,!1),()=>{window.removeEventListener("online",n),window.removeEventListener("offline",r)}}})}onSubscribe(){ne(this,Va)||this.setEventListener(ne(this,Ji))}onUnsubscribe(){var t;this.hasListeners()||((t=ne(this,Va))==null||t.call(this),Ee(this,Va,void 0))}setEventListener(t){var n;Ee(this,Ji,t),(n=ne(this,Va))==null||n.call(this),Ee(this,Va,t(this.setOnline.bind(this)))}setOnline(t){ne(this,Zi)!==t&&(Ee(this,Zi,t),this.listeners.forEach(r=>{r(t)}))}isOnline(){return ne(this,Zi)}},Zi=new WeakMap,Va=new WeakMap,Ji=new WeakMap,GS),K1=new mte;function dte(e){return Math.min(1e3*2**e,3e4)}function aE(e){return(e??"online")==="online"?K1.isOnline():!0}var jv=class extends Error{constructor(e){super("CancelledError"),this.revert=e==null?void 0:e.revert,this.silent=e==null?void 0:e.silent}};function oE(e){let t=!1,n=0,r;const a=lte(),i=()=>a.status!=="pending",u=g=>{var y;if(!i()){const b=new jv(g);v(b),(y=e.onCancel)==null||y.call(e,b)}},l=()=>{t=!0},c=()=>{t=!1},m=()=>eE.isFocused()&&(e.networkMode==="always"||K1.isOnline())&&e.canRun(),f=()=>aE(e.networkMode)&&e.canRun(),d=g=>{i()||(r==null||r(),a.resolve(g))},v=g=>{i()||(r==null||r(),a.reject(g))},_=()=>new Promise(g=>{var y;r=b=>{(i()||m())&&g(b)},(y=e.onPause)==null||y.call(e)}).then(()=>{var g;r=void 0,i()||(g=e.onContinue)==null||g.call(e)}),w=()=>{if(i())return;let g;const y=n===0?e.initialPromise:void 0;try{g=y??e.fn()}catch(b){g=Promise.reject(b)}Promise.resolve(g).then(d).catch(b=>{var A;if(i())return;const O=e.retry??(rE.isServer()?0:3),C=e.retryDelay??dte,k=typeof C=="function"?C(n,b):C,P=O===!0||typeof O=="number"&&nm()?void 0:_()).then(()=>{t?v(b):w()})})};return{promise:a,status:()=>a.status,cancel:u,continue:()=>(r==null||r(),a),cancelRetry:l,continueRetry:c,canStart:f,start:()=>(f()?w():_().then(w),a)}}var Io,FS,iE=(FS=class{constructor(){De(this,Io)}destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),ete(this.gcTime)&&Ee(this,Io,Tv.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(rE.isServer()?1/0:300*1e3))}clearGcTimeout(){ne(this,Io)!==void 0&&(Tv.clearTimeout(ne(this,Io)),Ee(this,Io,void 0))}},Io=new WeakMap,FS);function fte(e){return{onFetch:(t,n)=>{var f,d,v,_,w;const r=t.options,a=(v=(d=(f=t.fetchOptions)==null?void 0:f.meta)==null?void 0:d.fetchMore)==null?void 0:v.direction,i=((_=t.state.data)==null?void 0:_.pages)||[],u=((w=t.state.data)==null?void 0:w.pageParams)||[];let l={pages:[],pageParams:[]},c=0;const m=async()=>{let g=!1;const y=C=>{ute(C,()=>t.signal,()=>g=!0)},b=nE(t.options,t.fetchOptions),O=async(C,k,P)=>{if(g)return Promise.reject(t.signal.reason);if(k==null&&C.pages.length)return Promise.resolve(C);const T=(()=>{const $={client:t.client,queryKey:t.queryKey,pageParam:k,direction:P?"backward":"forward",meta:t.options.meta};return y($),$})(),q=await b(T),{maxPages:j}=t.options,B=P?ste:ite;return{pages:B(C.pages,q,j),pageParams:B(C.pageParams,k,j)}};if(a&&i.length){const C=a==="backward",k=C?vte:jS,P={pages:i,pageParams:u},A=k(r,P);l=await O(P,A,C)}else{const C=e??i.length;do{const k=c===0?u[0]??r.initialPageParam:jS(r,l);if(c>0&&k==null)break;l=await O(l,k),c++}while(c{var g,y;return(y=(g=t.options).persister)==null?void 0:y.call(g,m,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n)}:t.fetchFn=m}}}function jS(e,{pages:t,pageParams:n}){const r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function vte(e,{pages:t,pageParams:n}){var r;return t.length>0?(r=e.getPreviousPageParam)==null?void 0:r.call(e,t[0],t,n[0],n):void 0}var es,Do,ts,Vn,$o,Dt,Wl,Lo,Nn,sE,Jr,BS,hte=(BS=class extends iE{constructor(t){super();De(this,Nn);De(this,es);De(this,Do);De(this,ts);De(this,Vn);De(this,$o);De(this,Dt);De(this,Wl);De(this,Lo);Ee(this,Lo,!1),Ee(this,Wl,t.defaultOptions),this.setOptions(t.options),this.observers=[],Ee(this,$o,t.client),Ee(this,Vn,ne(this,$o).getQueryCache()),this.queryKey=t.queryKey,this.queryHash=t.queryHash,Ee(this,Do,IS(this.options)),this.state=t.state??ne(this,Do),this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return ne(this,es)}get promise(){var t;return(t=ne(this,Dt))==null?void 0:t.promise}setOptions(t){if(this.options={...ne(this,Wl),...t},t!=null&&t._type&&Ee(this,es,t._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){const n=IS(this.options);n.data!==void 0&&(this.setState(MS(n.data,n.dataUpdatedAt)),Ee(this,Do,n))}}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&ne(this,Vn).remove(this)}setData(t,n){const r=ote(this.state.data,t,this.options);return zt(this,Nn,Jr).call(this,{data:r,type:"success",dataUpdatedAt:n==null?void 0:n.updatedAt,manual:n==null?void 0:n.manual}),r}setState(t){zt(this,Nn,Jr).call(this,{type:"setState",state:t})}cancel(t){var r,a;const n=(r=ne(this,Dt))==null?void 0:r.promise;return(a=ne(this,Dt))==null||a.cancel(t),n?n.then(sr).catch(sr):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return ne(this,Do)}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(t=>nte(t.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===lh||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0?this.observers.some(t=>Nv(t.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(t=>t.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(t=0){return this.state.data===void 0?!0:t==="static"?!1:this.state.isInvalidated?!0:!tte(this.state.dataUpdatedAt,t)}onFocus(){var n;const t=this.observers.find(r=>r.shouldFetchOnWindowFocus());t==null||t.refetch({cancelRefetch:!1}),(n=ne(this,Dt))==null||n.continue()}onOnline(){var n;const t=this.observers.find(r=>r.shouldFetchOnReconnect());t==null||t.refetch({cancelRefetch:!1}),(n=ne(this,Dt))==null||n.continue()}addObserver(t){this.observers.includes(t)||(this.observers.push(t),this.clearGcTimeout(),ne(this,Vn).notify({type:"observerAdded",query:this,observer:t}))}removeObserver(t){this.observers.includes(t)&&(this.observers=this.observers.filter(n=>n!==t),this.observers.length||(ne(this,Dt)&&(ne(this,Lo)||zt(this,Nn,sE).call(this)?ne(this,Dt).cancel({revert:!0}):ne(this,Dt).cancelRetry()),this.scheduleGc()),ne(this,Vn).notify({type:"observerRemoved",query:this,observer:t}))}getObserversCount(){return this.observers.length}invalidate(){this.state.isInvalidated||zt(this,Nn,Jr).call(this,{type:"invalidate"})}async fetch(t,n){var m,f,d,v,_,w,g,y,b,O,C;if(this.state.fetchStatus!=="idle"&&((m=ne(this,Dt))==null?void 0:m.status())!=="rejected"){if(this.state.data!==void 0&&(n!=null&&n.cancelRefetch))this.cancel({silent:!0});else if(ne(this,Dt))return ne(this,Dt).continueRetry(),ne(this,Dt).promise}if(t&&this.setOptions(t),!this.options.queryFn){const k=this.observers.find(P=>P.options.queryFn);k&&this.setOptions(k.options)}const r=new AbortController,a=k=>{Object.defineProperty(k,"signal",{enumerable:!0,get:()=>(Ee(this,Lo,!0),r.signal)})},i=()=>{const k=nE(this.options,n),A=(()=>{const T={client:ne(this,$o),queryKey:this.queryKey,meta:this.meta};return a(T),T})();return Ee(this,Lo,!1),this.options.persister?this.options.persister(k,A,this):k(A)},l=(()=>{const k={fetchOptions:n,options:this.options,queryKey:this.queryKey,client:ne(this,$o),state:this.state,fetchFn:i};return a(k),k})(),c=ne(this,es)==="infinite"?fte(this.options.pages):this.options.behavior;c==null||c.onFetch(l,this),Ee(this,ts,this.state),(this.state.fetchStatus==="idle"||this.state.fetchMeta!==((f=l.fetchOptions)==null?void 0:f.meta))&&zt(this,Nn,Jr).call(this,{type:"fetch",meta:(d=l.fetchOptions)==null?void 0:d.meta}),Ee(this,Dt,oE({initialPromise:n==null?void 0:n.initialPromise,fn:l.fetchFn,onCancel:k=>{k instanceof jv&&k.revert&&this.setState({...ne(this,ts),fetchStatus:"idle"}),r.abort()},onFail:(k,P)=>{zt(this,Nn,Jr).call(this,{type:"failed",failureCount:k,error:P})},onPause:()=>{zt(this,Nn,Jr).call(this,{type:"pause"})},onContinue:()=>{zt(this,Nn,Jr).call(this,{type:"continue"})},retry:l.options.retry,retryDelay:l.options.retryDelay,networkMode:l.options.networkMode,canRun:()=>!0}));try{const k=await ne(this,Dt).start();if(k===void 0)throw new Error(`${this.queryHash} data is undefined`);return this.setData(k),(_=(v=ne(this,Vn).config).onSuccess)==null||_.call(v,k,this),(g=(w=ne(this,Vn).config).onSettled)==null||g.call(w,k,this.state.error,this),k}catch(k){if(k instanceof jv){if(k.silent)return ne(this,Dt).promise;if(k.revert){if(this.state.data===void 0)throw k;return this.state.data}}throw zt(this,Nn,Jr).call(this,{type:"error",error:k}),(b=(y=ne(this,Vn).config).onError)==null||b.call(y,k,this),(C=(O=ne(this,Vn).config).onSettled)==null||C.call(O,this.state.data,k,this),k}finally{this.scheduleGc()}}},es=new WeakMap,Do=new WeakMap,ts=new WeakMap,Vn=new WeakMap,$o=new WeakMap,Dt=new WeakMap,Wl=new WeakMap,Lo=new WeakMap,Nn=new WeakSet,sE=function(){return this.state.fetchStatus==="paused"&&this.state.status==="pending"},Jr=function(t){const n=r=>{switch(t.type){case"failed":return{...r,fetchFailureCount:t.failureCount,fetchFailureReason:t.error};case"pause":return{...r,fetchStatus:"paused"};case"continue":return{...r,fetchStatus:"fetching"};case"fetch":return{...r,...yte(r.data,this.options),fetchMeta:t.meta??null};case"success":const a={...r,...MS(t.data,t.dataUpdatedAt),dataUpdateCount:r.dataUpdateCount+1,...!t.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};return Ee(this,ts,t.manual?a:void 0),a;case"error":const i=t.error;return{...r,error:i,errorUpdateCount:r.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:r.fetchFailureCount+1,fetchFailureReason:i,fetchStatus:"idle",status:"error",isInvalidated:!0};case"invalidate":return{...r,isInvalidated:!0};case"setState":return{...r,...t.state}}};this.state=n(this.state),cn.batch(()=>{this.observers.forEach(r=>{r.onQueryUpdate()}),ne(this,Vn).notify({query:this,type:"updated",action:t})})},BS);function yte(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:aE(t.networkMode)?"fetching":"paused",...e===void 0&&{error:null,status:"pending"}}}function MS(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:"success"}}function IS(e){const t=typeof e.initialData=="function"?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt=="function"?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?"success":"pending",fetchStatus:"idle"}}var Vl,kr,nn,Ho,Cr,Fa,zS,_te=(zS=class extends iE{constructor(t){super();De(this,Cr);De(this,Vl);De(this,kr);De(this,nn);De(this,Ho);Ee(this,Vl,t.client),this.mutationId=t.mutationId,Ee(this,nn,t.mutationCache),Ee(this,kr,[]),this.state=t.state||gte(),this.setOptions(t.options),this.scheduleGc()}setOptions(t){this.options=t,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(t){ne(this,kr).includes(t)||(ne(this,kr).push(t),this.clearGcTimeout(),ne(this,nn).notify({type:"observerAdded",mutation:this,observer:t}))}removeObserver(t){Ee(this,kr,ne(this,kr).filter(n=>n!==t)),this.scheduleGc(),ne(this,nn).notify({type:"observerRemoved",mutation:this,observer:t})}optionalRemove(){ne(this,kr).length||(this.state.status==="pending"?this.scheduleGc():ne(this,nn).remove(this))}continue(){var t;return((t=ne(this,Ho))==null?void 0:t.continue())??this.execute(this.state.variables)}async execute(t){var u,l,c,m,f,d,v,_,w,g,y,b,O,C,k,P,A,T;const n=()=>{zt(this,Cr,Fa).call(this,{type:"continue"})},r={client:ne(this,Vl),meta:this.options.meta,mutationKey:this.options.mutationKey};Ee(this,Ho,oE({fn:()=>this.options.mutationFn?this.options.mutationFn(t,r):Promise.reject(new Error("No mutationFn found")),onFail:(q,j)=>{zt(this,Cr,Fa).call(this,{type:"failed",failureCount:q,error:j})},onPause:()=>{zt(this,Cr,Fa).call(this,{type:"pause"})},onContinue:n,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>ne(this,nn).canRun(this)}));const a=this.state.status==="pending",i=!ne(this,Ho).canStart();try{if(a)n();else{zt(this,Cr,Fa).call(this,{type:"pending",variables:t,isPaused:i}),ne(this,nn).config.onMutate&&await ne(this,nn).config.onMutate(t,this,r);const j=await((l=(u=this.options).onMutate)==null?void 0:l.call(u,t,r));j!==this.state.context&&zt(this,Cr,Fa).call(this,{type:"pending",context:j,variables:t,isPaused:i})}const q=await ne(this,Ho).start();return await((m=(c=ne(this,nn).config).onSuccess)==null?void 0:m.call(c,q,t,this.state.context,this,r)),await((d=(f=this.options).onSuccess)==null?void 0:d.call(f,q,t,this.state.context,r)),await((_=(v=ne(this,nn).config).onSettled)==null?void 0:_.call(v,q,null,this.state.variables,this.state.context,this,r)),await((g=(w=this.options).onSettled)==null?void 0:g.call(w,q,null,t,this.state.context,r)),zt(this,Cr,Fa).call(this,{type:"success",data:q}),q}catch(q){try{await((b=(y=ne(this,nn).config).onError)==null?void 0:b.call(y,q,t,this.state.context,this,r))}catch(j){Promise.reject(j)}try{await((C=(O=this.options).onError)==null?void 0:C.call(O,q,t,this.state.context,r))}catch(j){Promise.reject(j)}try{await((P=(k=ne(this,nn).config).onSettled)==null?void 0:P.call(k,void 0,q,this.state.variables,this.state.context,this,r))}catch(j){Promise.reject(j)}try{await((T=(A=this.options).onSettled)==null?void 0:T.call(A,void 0,q,t,this.state.context,r))}catch(j){Promise.reject(j)}throw zt(this,Cr,Fa).call(this,{type:"error",error:q}),q}finally{ne(this,nn).runNext(this)}}},Vl=new WeakMap,kr=new WeakMap,nn=new WeakMap,Ho=new WeakMap,Cr=new WeakSet,Fa=function(t){const n=r=>{switch(t.type){case"failed":return{...r,failureCount:t.failureCount,failureReason:t.error};case"pause":return{...r,isPaused:!0};case"continue":return{...r,isPaused:!1};case"pending":return{...r,context:t.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:t.isPaused,status:"pending",variables:t.variables,submittedAt:Date.now()};case"success":return{...r,data:t.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...r,data:void 0,error:t.error,failureCount:r.failureCount+1,failureReason:t.error,isPaused:!1,status:"error"}}};this.state=n(this.state),cn.batch(()=>{ne(this,kr).forEach(r=>{r.onMutationUpdate(t)}),ne(this,nn).notify({mutation:this,type:"updated",action:t})})},zS);function gte(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var ta,ur,Kl,US,xte=(US=class extends F0{constructor(t={}){super();De(this,ta);De(this,ur);De(this,Kl);this.config=t,Ee(this,ta,new Set),Ee(this,ur,new Map),Ee(this,Kl,0)}build(t,n,r){const a=new _te({client:t,mutationCache:this,mutationId:++mp(this,Kl)._,options:t.defaultMutationOptions(n),state:r});return this.add(a),a}add(t){ne(this,ta).add(t);const n=Ip(t);if(typeof n=="string"){const r=ne(this,ur).get(n);r?r.push(t):ne(this,ur).set(n,[t])}this.notify({type:"added",mutation:t})}remove(t){if(ne(this,ta).delete(t)){const n=Ip(t);if(typeof n=="string"){const r=ne(this,ur).get(n);if(r)if(r.length>1){const a=r.indexOf(t);a!==-1&&r.splice(a,1)}else r[0]===t&&ne(this,ur).delete(n)}}this.notify({type:"removed",mutation:t})}canRun(t){const n=Ip(t);if(typeof n=="string"){const r=ne(this,ur).get(n),a=r==null?void 0:r.find(i=>i.state.status==="pending");return!a||a===t}else return!0}runNext(t){var r;const n=Ip(t);if(typeof n=="string"){const a=(r=ne(this,ur).get(n))==null?void 0:r.find(i=>i!==t&&i.state.isPaused);return(a==null?void 0:a.continue())??Promise.resolve()}else return Promise.resolve()}clear(){cn.batch(()=>{ne(this,ta).forEach(t=>{this.notify({type:"removed",mutation:t})}),ne(this,ta).clear(),ne(this,ur).clear()})}getAll(){return Array.from(ne(this,ta))}find(t){const n={exact:!0,...t};return this.getAll().find(r=>TS(n,r))}findAll(t={}){return this.getAll().filter(n=>TS(t,n))}notify(t){cn.batch(()=>{this.listeners.forEach(n=>{n(t)})})}resumePausedMutations(){const t=this.getAll().filter(n=>n.state.isPaused);return cn.batch(()=>Promise.all(t.map(n=>n.continue().catch(sr))))}},ta=new WeakMap,ur=new WeakMap,Kl=new WeakMap,US);function Ip(e){var t;return(t=e.options.scope)==null?void 0:t.id}var Ar,WS,wte=(WS=class extends F0{constructor(t={}){super();De(this,Ar);this.config=t,Ee(this,Ar,new Map)}build(t,n,r){const a=n.queryKey,i=n.queryHash??uh(a,n);let u=this.get(i);return u||(u=new hte({client:t,queryKey:a,queryHash:i,options:t.defaultQueryOptions(n),state:r,defaultOptions:t.getQueryDefaults(a)}),this.add(u)),u}add(t){ne(this,Ar).has(t.queryHash)||(ne(this,Ar).set(t.queryHash,t),this.notify({type:"added",query:t}))}remove(t){const n=ne(this,Ar).get(t.queryHash);n&&(t.destroy(),n===t&&ne(this,Ar).delete(t.queryHash),this.notify({type:"removed",query:t}))}clear(){cn.batch(()=>{this.getAll().forEach(t=>{this.remove(t)})})}get(t){return ne(this,Ar).get(t)}getAll(){return[...ne(this,Ar).values()]}find(t){const n={exact:!0,...t};return this.getAll().find(r=>RS(n,r))}findAll(t={}){const n=this.getAll();return Object.keys(t).length>0?n.filter(r=>RS(t,r)):n}notify(t){cn.batch(()=>{this.listeners.forEach(n=>{n(t)})})}onFocus(){cn.batch(()=>{this.getAll().forEach(t=>{t.onFocus()})})}onOnline(){cn.batch(()=>{this.getAll().forEach(t=>{t.onOnline()})})}},Ar=new WeakMap,WS),ht,Ka,Xa,ns,rs,Ya,as,os,VS,bte=(VS=class{constructor(e={}){De(this,ht);De(this,Ka);De(this,Xa);De(this,ns);De(this,rs);De(this,Ya);De(this,as);De(this,os);Ee(this,ht,e.queryCache||new wte),Ee(this,Ka,e.mutationCache||new xte),Ee(this,Xa,e.defaultOptions||{}),Ee(this,ns,new Map),Ee(this,rs,new Map),Ee(this,Ya,0)}mount(){mp(this,Ya)._++,ne(this,Ya)===1&&(Ee(this,as,eE.subscribe(async e=>{e&&(await this.resumePausedMutations(),ne(this,ht).onFocus())})),Ee(this,os,K1.subscribe(async e=>{e&&(await this.resumePausedMutations(),ne(this,ht).onOnline())})))}unmount(){var e,t;mp(this,Ya)._--,ne(this,Ya)===0&&((e=ne(this,as))==null||e.call(this),Ee(this,as,void 0),(t=ne(this,os))==null||t.call(this),Ee(this,os,void 0))}isFetching(e){return ne(this,ht).findAll({...e,fetchStatus:"fetching"}).length}isMutating(e){return ne(this,Ka).findAll({...e,status:"pending"}).length}getQueryData(e){var n;const t=this.defaultQueryOptions({queryKey:e});return(n=ne(this,ht).get(t.queryHash))==null?void 0:n.state.data}ensureQueryData(e){const t=this.defaultQueryOptions(e),n=ne(this,ht).build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(Nv(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return ne(this,ht).findAll(e).map(({queryKey:t,state:n})=>{const r=n.data;return[t,r]})}setQueryData(e,t,n){const r=this.defaultQueryOptions({queryKey:e}),a=ne(this,ht).get(r.queryHash),i=a==null?void 0:a.state.data,u=Jee(t,i);if(u!==void 0)return ne(this,ht).build(this,r).setData(u,{...n,manual:!0})}setQueriesData(e,t,n){return cn.batch(()=>ne(this,ht).findAll(e).map(({queryKey:r})=>[r,this.setQueryData(r,t,n)]))}getQueryState(e){var n;const t=this.defaultQueryOptions({queryKey:e});return(n=ne(this,ht).get(t.queryHash))==null?void 0:n.state}removeQueries(e){const t=ne(this,ht);cn.batch(()=>{t.findAll(e).forEach(n=>{t.remove(n)})})}resetQueries(e,t){const n=ne(this,ht);return cn.batch(()=>(n.findAll(e).forEach(r=>{r.reset()}),this.refetchQueries({type:"active",...e},t)))}cancelQueries(e,t={}){const n={revert:!0,...t},r=cn.batch(()=>ne(this,ht).findAll(e).map(a=>a.cancel(n)));return Promise.all(r).then(sr).catch(sr)}invalidateQueries(e,t={}){return cn.batch(()=>(ne(this,ht).findAll(e).forEach(n=>{n.invalidate()}),(e==null?void 0:e.refetchType)==="none"?Promise.resolve():this.refetchQueries({...e,type:(e==null?void 0:e.refetchType)??(e==null?void 0:e.type)??"active"},t)))}refetchQueries(e,t={}){const n={...t,cancelRefetch:t.cancelRefetch??!0},r=cn.batch(()=>ne(this,ht).findAll(e).filter(a=>!a.isDisabled()&&!a.isStatic()).map(a=>{let i=a.fetch(void 0,n);return n.throwOnError||(i=i.catch(sr)),a.state.fetchStatus==="paused"?Promise.resolve():i}));return Promise.all(r).then(sr)}fetchQuery(e){const t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);const n=ne(this,ht).build(this,t);return n.isStaleByTime(Nv(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(sr).catch(sr)}fetchInfiniteQuery(e){return e._type="infinite",this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(sr).catch(sr)}ensureInfiniteQueryData(e){return e._type="infinite",this.ensureQueryData(e)}resumePausedMutations(){return K1.isOnline()?ne(this,Ka).resumePausedMutations():Promise.resolve()}getQueryCache(){return ne(this,ht)}getMutationCache(){return ne(this,Ka)}getDefaultOptions(){return ne(this,Xa)}setDefaultOptions(e){Ee(this,Xa,e)}setQueryDefaults(e,t){ne(this,ns).set(zl(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){const t=[...ne(this,ns).values()],n={};return t.forEach(r=>{qs(e,r.queryKey)&&Object.assign(n,r.defaultOptions)}),n}setMutationDefaults(e,t){ne(this,rs).set(zl(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){const t=[...ne(this,rs).values()],n={};return t.forEach(r=>{qs(e,r.mutationKey)&&Object.assign(n,r.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;const t={...ne(this,Xa).queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||(t.queryHash=uh(t.queryKey,t)),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!=="always"),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode="offlineFirst"),t.queryFn===lh&&(t.enabled=!1),t}defaultMutationOptions(e){return e!=null&&e._defaulted?e:{...ne(this,Xa).mutations,...(e==null?void 0:e.mutationKey)&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){ne(this,ht).clear(),ne(this,Ka).clear()}},ht=new WeakMap,Ka=new WeakMap,Xa=new WeakMap,ns=new WeakMap,rs=new WeakMap,Ya=new WeakMap,as=new WeakMap,os=new WeakMap,VS),Ste=R.createContext(void 0),Pte=({client:e,children:t})=>(R.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),E.jsx(Ste.Provider,{value:e,children:t})),Ote=Object.defineProperty,wn=(e,t)=>Ote(e,"name",{value:t,configurable:!0}),[ch]=Is("Tooltip",[t0]),kte=t0(),Cte="TooltipProvider",Ate=700,DS="tooltip.open",[Ete,Rte]=ch(Cte),Tte=wn(e=>{const{__scopeTooltip:t,delayDuration:n=Ate,skipDelayDuration:r=300,disableHoverableContent:a=!1,children:i}=e,u=R.useRef(!0),l=R.useRef(!1),c=R.useRef(0);return R.useEffect(()=>{const m=c.current;return()=>window.clearTimeout(m)},[]),E.jsx(Ete,{scope:t,isOpenDelayedRef:u,delayDuration:n,onOpen:R.useCallback(()=>{r<=0||(window.clearTimeout(c.current),u.current=!1)},[r]),onClose:R.useCallback(()=>{r<=0||(window.clearTimeout(c.current),c.current=window.setTimeout(()=>u.current=!0,r))},[r]),isPointerInTransitRef:l,onPointerInTransitChange:R.useCallback(m=>{l.current=m},[]),disableHoverableContent:a,children:i})},"TooltipProvider"),Nte="Tooltip",[Wte,ph]=ch(Nte),qte="TooltipPortal",[Vte,jte]=ch(qte,{forceMount:void 0}),Ul="TooltipContent",Mte=R.forwardRef(wn(function(t,n){const r=jte(Ul,t.__scopeTooltip),{forceMount:a=r.forceMount,side:i="top",...u}=t,l=ph(Ul,t.__scopeTooltip);return E.jsx(Wv,{present:a||l.open,children:l.disableHoverableContent?E.jsx(uE,{side:i,...u,ref:n}):E.jsx(Ite,{side:i,...u,ref:n})})},"TooltipContent")),Ite=R.forwardRef(wn(function(t,n){const r=ph(Ul,t.__scopeTooltip),a=Rte(Ul,t.__scopeTooltip),i=R.useRef(null),u=Nt(n,i),[l,c]=R.useState(null),{trigger:m,onClose:f}=r,d=i.current,{onPointerInTransitChange:v}=a,_=R.useCallback(()=>{c(null),v(!1)},[v]),w=R.useCallback((g,y)=>{const b=g.currentTarget,O={x:g.clientX,y:g.clientY},C=lE(O,b.getBoundingClientRect()),k=cE(O,C),P=pE(y.getBoundingClientRect()),A=dE([...k,...P]);c(A),v(!0)},[v]);return R.useEffect(()=>()=>_(),[_]),R.useEffect(()=>{if(m&&d){const g=wn(b=>w(b,d),"handleTriggerLeave"),y=wn(b=>w(b,m),"handleContentLeave");return m.addEventListener("pointerleave",g),d.addEventListener("pointerleave",y),()=>{m.removeEventListener("pointerleave",g),d.removeEventListener("pointerleave",y)}}},[m,d,w,_]),R.useEffect(()=>{if(l){const g=wn(y=>{const b=y.target,O={x:y.clientX,y:y.clientY},C=(m==null?void 0:m.contains(b))||(d==null?void 0:d.contains(b)),k=!mE(O,l);C?_():k&&(_(),f())},"handleTrackPointerGrace");return document.addEventListener("pointermove",g),()=>document.removeEventListener("pointermove",g)}},[m,d,l,f,_]),E.jsx(uE,{...t,ref:u})},"TooltipContentHoverable")),Dte=AT("TooltipContent"),uE=R.forwardRef(wn(function(t,n){const{__scopeTooltip:r,children:a,"aria-label":i,id:u,onEscapeKeyDown:l,onPointerDownOutside:c,...m}=t,f=ph(Ul,r),d=kte(r),{onClose:v}=f;R.useEffect(()=>(document.addEventListener(DS,v),()=>document.removeEventListener(DS,v)),[v]),R.useEffect(()=>{if(f.trigger){const w=wn(g=>{g.target instanceof Node&&g.target.contains(f.trigger)&&v()},"handleScroll");return window.addEventListener("scroll",w,{capture:!0}),()=>window.removeEventListener("scroll",w,{capture:!0})}},[f.trigger,v]);const{setContentId:_}=f;return Pt(()=>(_(u),()=>{_(void 0)}),[u,_]),E.jsx(nP,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:l,onPointerDownOutside:c,onFocusOutside:w=>w.preventDefault(),onDismiss:v,children:E.jsxs(CP,{"data-state":f.stateAttribute,role:i?void 0:"tooltip",id:i?void 0:f.contentId,...d,...m,ref:n,style:{...m.style,"--radix-tooltip-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-tooltip-content-available-width":"var(--radix-popper-available-width)","--radix-tooltip-content-available-height":"var(--radix-popper-available-height)","--radix-tooltip-trigger-width":"var(--radix-popper-anchor-width)","--radix-tooltip-trigger-height":"var(--radix-popper-anchor-height)"},children:[E.jsx(Dte,{children:a}),i?E.jsx(Pq,{id:f.contentId,role:"tooltip",children:i}):null]})})},"TooltipContentImpl"));function lE(e,t){const n=Math.abs(t.top-e.y),r=Math.abs(t.bottom-e.y),a=Math.abs(t.right-e.x),i=Math.abs(t.left-e.x);switch(Math.min(n,r,a,i)){case i:return"left";case a:return"right";case n:return"top";case r:return"bottom";default:throw new Error("unreachable")}}wn(lE,"getExitSideFromRect");function cE(e,t,n=5){const r=[];switch(t){case"top":r.push({x:e.x-n,y:e.y+n},{x:e.x+n,y:e.y+n});break;case"bottom":r.push({x:e.x-n,y:e.y-n},{x:e.x+n,y:e.y-n});break;case"left":r.push({x:e.x+n,y:e.y-n},{x:e.x+n,y:e.y+n});break;case"right":r.push({x:e.x-n,y:e.y-n},{x:e.x-n,y:e.y+n});break}return r}wn(cE,"getPaddedExitPoints");function pE(e){const{top:t,right:n,bottom:r,left:a}=e;return[{x:a,y:t},{x:n,y:t},{x:n,y:r},{x:a,y:r}]}wn(pE,"getPointsFromRect");function mE(e,t){const{x:n,y:r}=e;let a=!1;for(let i=0,u=t.length-1;ir!=v>r&&n<(d-m)*(r-f)/(v-f)+m&&(a=!a)}return a}wn(mE,"isPointInPolygon");function dE(e){const t=e.slice();return t.sort((n,r)=>n.xr.x?1:n.yr.y?1:0),fE(t)}wn(dE,"getHull");function fE(e){if(e.length<=1)return e.slice();const t=[];for(let r=0;r=2;){const i=t[t.length-1],u=t[t.length-2];if((i.x-u.x)*(a.y-u.y)>=(i.y-u.y)*(a.x-u.x))t.pop();else break}t.push(a)}t.pop();const n=[];for(let r=e.length-1;r>=0;r--){const a=e[r];for(;n.length>=2;){const i=n[n.length-1],u=n[n.length-2];if((i.x-u.x)*(a.y-u.y)>=(i.y-u.y)*(a.x-u.x))n.pop();else break}n.push(a)}return n.pop(),t.length===1&&n.length===1&&t[0].x===n[0].x&&t[0].y===n[0].y?t:t.concat(n)}wn(fE,"getHullPresorted");var $te=Tte,vE=Mte;const Lte=$te,Hte=R.forwardRef(({className:e,sideOffset:t=4,...n},r)=>E.jsx(vE,{ref:r,sideOffset:t,className:Je("z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",e),...n}));Hte.displayName=vE.displayName;const Gte=e=>{const t=R.useRef(null),n=R.useRef(null),r=R.useRef(null);return R.useEffect(()=>{if(t.current){try{const a=t.current.attachShadow({mode:"open"});n.current=a;const i=document.createElement("div");i.id="shadow-root",i.className="benchmark-dashboard",a.appendChild(i),JA.getAllCSS().then(u=>{const l=document.createElement("style");l.textContent=u,a.insertBefore(l,i);const c=XS.createRoot(i);r.current=c,c.render(E.jsx(L.StrictMode,{children:E.jsx(Pte,{client:new bte,children:E.jsx(Lte,{children:E.jsx(Vee,{...e})})})}))}).catch(u=>{console.error("Failed to inject CSS into Shadow DOM:",u)})}catch(a){console.error("Failed to create Shadow DOM:",a)}return()=>{r.current&&r.current.unmount()}}},[]),E.jsx("div",{ref:t,style:{width:"100%",minHeight:"400px"}})},Fte=`*, ::before, ::after { --tw-border-spacing-x: 0; --tw-border-spacing-y: 0; --tw-translate-x: 0; @@ -4434,4 +4434,4 @@ body { [data-side=right] .\\[\\[data-side\\=right\\]_\\&\\]\\:cursor-e-resize { cursor: e-resize; } -`;window.__BENCHMARK_CSS__=Eue;function h5(){try{if(typeof window>"u")return;const e=document.querySelectorAll('[data-react-component="benchmark-dashboard"]');if(e.length===0)return;e.forEach((t,n)=>{var r;try{const a=t;if(a.dataset.reactInitialized==="true")return;const o={apiBase:a.dataset.apiBase,initialVersion:a.dataset.version,theme:a.dataset.theme||"light",containerClassName:a.dataset.containerClass||"",containerId:`benchmark-dashboard-${n}`,features:{header:a.dataset.showHeader==="true",versionSelector:a.dataset.showVersionSelector!=="false",summaryCards:a.dataset.showSummaryCards!=="false",tabs:((r=a.dataset.tabs)==null?void 0:r.split(",").map(s=>s.trim()))||["overview","latency","resources"]}};Uc.createRoot(a).render(b.jsx(E.StrictMode,{children:b.jsx(Aue,{...o})})),a.dataset.reactInitialized="true"}catch(a){console.error(`Error initializing benchmark dashboard ${n+1}:`,a)}})}catch(e){console.error("Error in benchmark dashboard initialization:",e)}}function i7(){setTimeout(()=>{h5()},100)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",i7):i7();window.addEventListener("load",()=>{setTimeout(h5,200)});window.initializeBenchmarkDashboardShadow=h5; +`;window.__BENCHMARK_CSS__=Fte;function mh(){try{if(typeof window>"u")return;const e=document.querySelectorAll('[data-react-component="benchmark-dashboard"]');if(e.length===0)return;e.forEach((t,n)=>{var r;try{const a=t;if(a.dataset.reactInitialized==="true")return;const i={apiBase:a.dataset.apiBase,initialVersion:a.dataset.version,theme:a.dataset.theme||"light",containerClassName:a.dataset.containerClass||"",containerId:`benchmark-dashboard-${n}`,features:{header:a.dataset.showHeader==="true",versionSelector:a.dataset.showVersionSelector!=="false",summaryCards:a.dataset.showSummaryCards!=="false",tabs:((r=a.dataset.tabs)==null?void 0:r.split(",").map(l=>l.trim()))||["overview","latency","resources"]}};XS.createRoot(a).render(E.jsx(L.StrictMode,{children:E.jsx(Gte,{...i})})),a.dataset.reactInitialized="true"}catch(a){console.error(`Error initializing benchmark dashboard ${n+1}:`,a)}})}catch(e){console.error("Error in benchmark dashboard initialization:",e)}}function $S(){setTimeout(()=>{mh()},100)}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",$S):$S();window.addEventListener("load",()=>{setTimeout(mh,200)});window.initializeBenchmarkDashboardShadow=mh; diff --git a/site/tools/benchmark-dashboard/src/data/index.ts b/site/tools/benchmark-dashboard/src/data/index.ts index 5df91b342d..1fb18d6975 100644 --- a/site/tools/benchmark-dashboard/src/data/index.ts +++ b/site/tools/benchmark-dashboard/src/data/index.ts @@ -60,8 +60,11 @@ import { benchmarkData as v182TestSuite } from './versions/v1.8.2'; import { benchmarkData as v175TestSuite } from './versions/v1.7.5'; +import { benchmarkData as v183TestSuite } from './versions/v1.8.3'; + // Import all version data export const allTestSuites: TestSuite[] = [ + v183TestSuite, v182TestSuite, v175TestSuite, v181TestSuite, diff --git a/site/tools/benchmark-dashboard/src/data/versions/v1.8.3.ts b/site/tools/benchmark-dashboard/src/data/versions/v1.8.3.ts new file mode 100644 index 0000000000..576480d823 --- /dev/null +++ b/site/tools/benchmark-dashboard/src/data/versions/v1.8.3.ts @@ -0,0 +1,1215 @@ +import { TestSuite } from '../types'; + +// Benchmark data extracted from release artifact for version 1.8.3 +// Generated from benchmark_result.json + +export const benchmarkData: TestSuite = { + "metadata": { + "version": "1.8.3", + "runId": "1.8.3-release-2026-07-22", + "date": "2026-07-22T18:59:16Z", + "environment": "GitHub Release", + "description": "Benchmark results for version 1.8.3 from release artifacts", + "downloadUrl": "https://github.com/envoyproxy/gateway/releases/download/v1.8.3/benchmark_report.zip", + "testConfiguration": { + "connections": 100, + "cpuLimit": "1000m", + "duration": 90, + "memoryLimit": "2000Mi", + "rps": 100 + } + }, + "results": [ + { + "testName": "scaling up httproutes to 10 with 2 routes per hostname at 100 rps", + "routes": 10, + "routesPerHostname": 2, + "phase": "scaling-up", + "throughput": 399.9222222222222, + "totalRequests": 35993, + "latency": { + "max": 51.132415, + "min": 0.365536, + "mean": 0.5075770000000001, + "pstdev": 0.444223, + "percentiles": { + "p50": 0.472159, + "p75": 0.49329500000000004, + "p80": 0.500303, + "p90": 0.526463, + "p95": 0.575455, + "p99": 1.173119, + "p999": 4.875263 + } + }, + "resources": { + "envoyGateway": { + "memory": { + "max": 131.94921875, + "min": 110.19921875, + "mean": 125.26692708333333 + }, + "cpu": { + "max": 1.0666666666666664, + "min": 0.3999999999999996, + "mean": 0.5866666666666666 + } + }, + "envoyProxy": { + "memory": { + "max": 21.28515625, + "min": 7.125, + "mean": 19.7890625 + }, + "cpu": { + "max": 0, + "min": 0, + "mean": 0 + } + } + }, + "poolOverflow": 7, + "upstreamConnections": 9, + "counters": { + "benchmark.http_2xx": { + "value": 35993, + "perSecond": 399.9222222222222 + }, + "benchmark.pool_overflow": { + "value": 7, + "perSecond": 0.07777777777777778 + }, + "cluster_manager.cluster_added": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "default.total_match_count": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "membership_change": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "runtime.load_success": { + "value": 1, + "perSecond": 0.011111111111111112 + }, + "runtime.override_dir_not_exists": { + "value": 1, + "perSecond": 0.011111111111111112 + }, + "upstream_cx_http1_total": { + "value": 9, + "perSecond": 0.1 + }, + "upstream_cx_rx_bytes_total": { + "value": 5650901, + "perSecond": 62787.78888888889 + }, + "upstream_cx_total": { + "value": 9, + "perSecond": 0.1 + }, + "upstream_cx_tx_bytes_total": { + "value": 1619685, + "perSecond": 17996.5 + }, + "upstream_rq_pending_overflow": { + "value": 7, + "perSecond": 0.07777777777777778 + }, + "upstream_rq_pending_total": { + "value": 9, + "perSecond": 0.1 + }, + "upstream_rq_total": { + "value": 35993, + "perSecond": 399.9222222222222 + } + } + }, + { + "testName": "scaling up httproutes to 50 with 10 routes per hostname at 300 rps", + "routes": 50, + "routesPerHostname": 10, + "phase": "scaling-up", + "throughput": 1213.0674157303372, + "totalRequests": 107963, + "latency": { + "max": 114.163711, + "min": 0.32768, + "mean": 0.517349, + "pstdev": 0.606409, + "percentiles": { + "p50": 0.461327, + "p75": 0.5228309999999999, + "p80": 0.543999, + "p90": 0.585855, + "p95": 0.707199, + "p99": 1.271103, + "p999": 4.477951 + } + }, + "resources": { + "envoyGateway": { + "memory": { + "max": 135.23046875, + "min": 128.62890625, + "mean": 133.09075520833332 + }, + "cpu": { + "max": 0.6666666666666672, + "min": 0.39999999999999886, + "mean": 0.5583333333333336 + } + }, + "envoyProxy": { + "memory": { + "max": 25.62890625, + "min": 20.78515625, + "mean": 24.804817708333335 + }, + "cpu": { + "max": 29.86671699062718, + "min": 29.61201171177602, + "mean": 29.771014316353924 + } + } + }, + "poolOverflow": 37, + "upstreamConnections": 28, + "counters": { + "benchmark.http_2xx": { + "value": 107963, + "perSecond": 1213.0674157303372 + }, + "benchmark.pool_overflow": { + "value": 37, + "perSecond": 0.4157303370786517 + }, + "cluster_manager.cluster_added": { + "value": 4, + "perSecond": 0.0449438202247191 + }, + "default.total_match_count": { + "value": 4, + "perSecond": 0.0449438202247191 + }, + "membership_change": { + "value": 4, + "perSecond": 0.0449438202247191 + }, + "runtime.load_success": { + "value": 1, + "perSecond": 0.011235955056179775 + }, + "runtime.override_dir_not_exists": { + "value": 1, + "perSecond": 0.011235955056179775 + }, + "upstream_cx_http1_total": { + "value": 28, + "perSecond": 0.3146067415730337 + }, + "upstream_cx_rx_bytes_total": { + "value": 16950191, + "perSecond": 190451.5842696629 + }, + "upstream_cx_total": { + "value": 28, + "perSecond": 0.3146067415730337 + }, + "upstream_cx_tx_bytes_total": { + "value": 4858335, + "perSecond": 54588.03370786517 + }, + "upstream_rq_pending_overflow": { + "value": 37, + "perSecond": 0.4157303370786517 + }, + "upstream_rq_pending_total": { + "value": 28, + "perSecond": 0.3146067415730337 + }, + "upstream_rq_total": { + "value": 107963, + "perSecond": 1213.0674157303372 + } + } + }, + { + "testName": "scaling up httproutes to 100 with 20 routes per hostname at 500 rps", + "routes": 100, + "routesPerHostname": 20, + "phase": "scaling-up", + "throughput": 1998.588888888889, + "totalRequests": 179873, + "latency": { + "max": 96.337919, + "min": 0.34664, + "mean": 0.5038170000000001, + "pstdev": 0.744036, + "percentiles": { + "p50": 0.45004700000000003, + "p75": 0.47902300000000003, + "p80": 0.488255, + "p90": 0.5363829999999999, + "p95": 0.714111, + "p99": 1.4520309999999998, + "p999": 4.068095 + } + }, + "resources": { + "envoyGateway": { + "memory": { + "max": 144.8125, + "min": 132.7578125, + "mean": 139.57135416666668 + }, + "cpu": { + "max": 0.7999999999999977, + "min": 0.4666666666666685, + "mean": 0.6608695652173914 + } + }, + "envoyProxy": { + "memory": { + "max": 29.76171875, + "min": 25.0078125, + "mean": 28.669921875 + }, + "cpu": { + "max": 50.28680540957189, + "min": 49.74902974451187, + "mean": 50.00520828577484 + } + } + }, + "poolOverflow": 127, + "upstreamConnections": 30, + "counters": { + "benchmark.http_2xx": { + "value": 179873, + "perSecond": 1998.588888888889 + }, + "benchmark.pool_overflow": { + "value": 127, + "perSecond": 1.4111111111111112 + }, + "cluster_manager.cluster_added": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "default.total_match_count": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "membership_change": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "runtime.load_success": { + "value": 1, + "perSecond": 0.011111111111111112 + }, + "runtime.override_dir_not_exists": { + "value": 1, + "perSecond": 0.011111111111111112 + }, + "upstream_cx_http1_total": { + "value": 30, + "perSecond": 0.3333333333333333 + }, + "upstream_cx_rx_bytes_total": { + "value": 28240061, + "perSecond": 313778.4555555555 + }, + "upstream_cx_total": { + "value": 30, + "perSecond": 0.3333333333333333 + }, + "upstream_cx_tx_bytes_total": { + "value": 8094285, + "perSecond": 89936.5 + }, + "upstream_rq_pending_overflow": { + "value": 127, + "perSecond": 1.4111111111111112 + }, + "upstream_rq_pending_total": { + "value": 30, + "perSecond": 0.3333333333333333 + }, + "upstream_rq_total": { + "value": 179873, + "perSecond": 1998.588888888889 + } + } + }, + { + "testName": "scaling up httproutes to 300 with 60 routes per hostname at 800 rps", + "routes": 300, + "routesPerHostname": 60, + "phase": "scaling-up", + "throughput": 3198.777777777778, + "totalRequests": 287890, + "latency": { + "max": 90.623999, + "min": 0.321952, + "mean": 0.879421, + "pstdev": 2.6107489999999998, + "percentiles": { + "p50": 0.6053430000000001, + "p75": 0.679487, + "p80": 0.715039, + "p90": 0.884159, + "p95": 1.155903, + "p99": 5.443071, + "p999": 48.566271 + } + }, + "resources": { + "envoyGateway": { + "memory": { + "max": 155.81640625, + "min": 139.4140625, + "mean": 150.62825520833334 + }, + "cpu": { + "max": 24.6, + "min": 0.7333333333333295, + "mean": 5.0809523809523816 + } + }, + "envoyProxy": { + "memory": { + "max": 49.01953125, + "min": 39.38671875, + "mean": 46.757161458333336 + }, + "cpu": { + "max": 71.12555608516043, + "min": 45.798966963013314, + "mean": 66.45335458648839 + } + } + }, + "poolOverflow": 109, + "upstreamConnections": 183, + "counters": { + "benchmark.http_2xx": { + "value": 287890, + "perSecond": 3198.777777777778 + }, + "benchmark.pool_overflow": { + "value": 109, + "perSecond": 1.211111111111111 + }, + "cluster_manager.cluster_added": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "default.total_match_count": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "membership_change": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "runtime.load_success": { + "value": 1, + "perSecond": 0.011111111111111112 + }, + "runtime.override_dir_not_exists": { + "value": 1, + "perSecond": 0.011111111111111112 + }, + "upstream_cx_http1_total": { + "value": 183, + "perSecond": 2.033333333333333 + }, + "upstream_cx_rx_bytes_total": { + "value": 45198730, + "perSecond": 502208.1111111111 + }, + "upstream_cx_total": { + "value": 183, + "perSecond": 2.033333333333333 + }, + "upstream_cx_tx_bytes_total": { + "value": 12955095, + "perSecond": 143945.5 + }, + "upstream_rq_pending_overflow": { + "value": 109, + "perSecond": 1.211111111111111 + }, + "upstream_rq_pending_total": { + "value": 183, + "perSecond": 2.033333333333333 + }, + "upstream_rq_total": { + "value": 287891, + "perSecond": 3198.788888888889 + } + } + }, + { + "testName": "scaling up httproutes to 500 with 100 routes per hostname at 1000 rps", + "routes": 500, + "routesPerHostname": 100, + "phase": "scaling-up", + "throughput": 3998.7555555555555, + "totalRequests": 359888, + "latency": { + "max": 257.10591900000003, + "min": 0.32776, + "mean": 1.966448, + "pstdev": 8.562240000000001, + "percentiles": { + "p50": 0.6871349999999999, + "p75": 0.857279, + "p80": 0.9281590000000001, + "p90": 1.254015, + "p95": 2.1233910000000003, + "p99": 51.021823, + "p999": 103.79263900000001 + } + }, + "resources": { + "envoyGateway": { + "memory": { + "max": 166.37109375, + "min": 151.65625, + "mean": 163.66588541666667 + }, + "cpu": { + "max": 37.79999999999999, + "min": 0.8666666666666836, + "mean": 7.569047619047619 + } + }, + "envoyProxy": { + "memory": { + "max": 69.76953125, + "min": 56.01171875, + "mean": 64.37630208333333 + }, + "cpu": { + "max": 85.0582403306762, + "min": 54.320248558863284, + "mean": 76.69461944531828 + } + } + }, + "poolOverflow": 108, + "upstreamConnections": 292, + "counters": { + "benchmark.http_2xx": { + "value": 359888, + "perSecond": 3998.7555555555555 + }, + "benchmark.pool_overflow": { + "value": 108, + "perSecond": 1.2 + }, + "cluster_manager.cluster_added": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "default.total_match_count": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "membership_change": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "runtime.load_success": { + "value": 1, + "perSecond": 0.011111111111111112 + }, + "runtime.override_dir_not_exists": { + "value": 1, + "perSecond": 0.011111111111111112 + }, + "upstream_cx_http1_total": { + "value": 292, + "perSecond": 3.2444444444444445 + }, + "upstream_cx_rx_bytes_total": { + "value": 56502416, + "perSecond": 627804.6222222223 + }, + "upstream_cx_total": { + "value": 292, + "perSecond": 3.2444444444444445 + }, + "upstream_cx_tx_bytes_total": { + "value": 16195140, + "perSecond": 179946 + }, + "upstream_rq_pending_overflow": { + "value": 108, + "perSecond": 1.2 + }, + "upstream_rq_pending_total": { + "value": 292, + "perSecond": 3.2444444444444445 + }, + "upstream_rq_total": { + "value": 359892, + "perSecond": 3998.8 + } + } + }, + { + "testName": "scaling up httproutes to 1000 with 200 routes per hostname at 2000 rps", + "routes": 1000, + "routesPerHostname": 200, + "phase": "scaling-up", + "throughput": 4517.711111111111, + "totalRequests": 406594, + "latency": { + "max": 2134.704127, + "min": 1.891712, + "mean": 73.911531, + "pstdev": 29.014477, + "percentiles": { + "p50": 72.912895, + "p75": 83.714047, + "p80": 85.831679, + "p90": 89.993215, + "p95": 93.27820700000001, + "p99": 115.322879, + "p999": 180.101119 + } + }, + "resources": { + "envoyGateway": { + "memory": { + "max": 185.81640625, + "min": 170.34375, + "mean": 180.59635416666666 + }, + "cpu": { + "max": 97.33333333333334, + "min": 0.8666666666666363, + "mean": 16.279999999999998 + } + }, + "envoyProxy": { + "memory": { + "max": 104.75390625, + "min": 88.48046875, + "mean": 100.72252604166667 + }, + "cpu": { + "max": 99.34067522187586, + "min": 68.32545834029196, + "mean": 95.7042618494685 + } + } + }, + "poolOverflow": 64, + "upstreamConnections": 336, + "counters": { + "benchmark.http_2xx": { + "value": 406594, + "perSecond": 4517.711111111111 + }, + "benchmark.pool_overflow": { + "value": 64, + "perSecond": 0.7111111111111111 + }, + "cluster_manager.cluster_added": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "default.total_match_count": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "membership_change": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "runtime.load_success": { + "value": 1, + "perSecond": 0.011111111111111112 + }, + "runtime.override_dir_not_exists": { + "value": 1, + "perSecond": 0.011111111111111112 + }, + "upstream_cx_http1_total": { + "value": 336, + "perSecond": 3.7333333333333334 + }, + "upstream_cx_rx_bytes_total": { + "value": 63835258, + "perSecond": 709280.6444444444 + }, + "upstream_cx_total": { + "value": 336, + "perSecond": 3.7333333333333334 + }, + "upstream_cx_tx_bytes_total": { + "value": 18311850, + "perSecond": 203465 + }, + "upstream_rq_pending_overflow": { + "value": 64, + "perSecond": 0.7111111111111111 + }, + "upstream_rq_pending_total": { + "value": 336, + "perSecond": 3.7333333333333334 + }, + "upstream_rq_total": { + "value": 406930, + "perSecond": 4521.444444444444 + } + } + }, + { + "testName": "scaling down httproutes to 500 with 100 routes per hostname at 1000 rps", + "routes": 500, + "routesPerHostname": 100, + "phase": "scaling-down", + "throughput": 3999.3, + "totalRequests": 359937, + "latency": { + "max": 259.268607, + "min": 0.322704, + "mean": 2.020829, + "pstdev": 9.292394, + "percentiles": { + "p50": 0.711231, + "p75": 0.899839, + "p80": 0.9801269999999999, + "p90": 1.384511, + "p95": 2.4189429999999996, + "p99": 47.151103, + "p999": 111.84947100000001 + } + }, + "resources": { + "envoyGateway": { + "memory": { + "max": 185.05078125, + "min": 166.546875, + "mean": 171.54231770833334 + }, + "cpu": { + "max": 9.133333333333269, + "min": 1.0000000000000377, + "mean": 2.746666666666671 + } + }, + "envoyProxy": { + "memory": { + "max": 104.9453125, + "min": 103.35546875, + "mean": 104.48984375 + }, + "cpu": { + "max": 0, + "min": 0, + "mean": 0 + } + } + }, + "poolOverflow": 60, + "upstreamConnections": 340, + "counters": { + "benchmark.http_2xx": { + "value": 359937, + "perSecond": 3999.3 + }, + "benchmark.pool_overflow": { + "value": 60, + "perSecond": 0.6666666666666666 + }, + "cluster_manager.cluster_added": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "default.total_match_count": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "membership_change": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "runtime.load_success": { + "value": 1, + "perSecond": 0.011111111111111112 + }, + "runtime.override_dir_not_exists": { + "value": 1, + "perSecond": 0.011111111111111112 + }, + "upstream_cx_http1_total": { + "value": 340, + "perSecond": 3.7777777777777777 + }, + "upstream_cx_rx_bytes_total": { + "value": 56510109, + "perSecond": 627890.1 + }, + "upstream_cx_total": { + "value": 340, + "perSecond": 3.7777777777777777 + }, + "upstream_cx_tx_bytes_total": { + "value": 16197300, + "perSecond": 179970 + }, + "upstream_rq_pending_overflow": { + "value": 60, + "perSecond": 0.6666666666666666 + }, + "upstream_rq_pending_total": { + "value": 340, + "perSecond": 3.7777777777777777 + }, + "upstream_rq_total": { + "value": 359940, + "perSecond": 3999.3333333333335 + } + } + }, + { + "testName": "scaling down httproutes to 300 with 60 routes per hostname at 800 rps", + "routes": 300, + "routesPerHostname": 60, + "phase": "scaling-down", + "throughput": 3197.8444444444444, + "totalRequests": 287806, + "latency": { + "max": 154.599423, + "min": 0.32588799999999996, + "mean": 0.934964, + "pstdev": 3.035537, + "percentiles": { + "p50": 0.610079, + "p75": 0.691455, + "p80": 0.7298870000000001, + "p90": 0.9088949999999999, + "p95": 1.200511, + "p99": 6.1445110000000005, + "p999": 49.352703 + } + }, + "resources": { + "envoyGateway": { + "memory": { + "max": 172.7265625, + "min": 156.8515625, + "mean": 160.60690104166667 + }, + "cpu": { + "max": 1.3333333333333524, + "min": 1.066666666666644, + "mean": 1.1826086956521698 + } + }, + "envoyProxy": { + "memory": { + "max": 104.6640625, + "min": 103.58984375, + "mean": 104.109375 + }, + "cpu": { + "max": 71.65725755667467, + "min": 47.0471566150785, + "mean": 64.86687438895122 + } + } + }, + "poolOverflow": 192, + "upstreamConnections": 200, + "counters": { + "benchmark.http_2xx": { + "value": 287806, + "perSecond": 3197.8444444444444 + }, + "benchmark.pool_overflow": { + "value": 192, + "perSecond": 2.1333333333333333 + }, + "cluster_manager.cluster_added": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "default.total_match_count": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "membership_change": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "runtime.load_success": { + "value": 1, + "perSecond": 0.011111111111111112 + }, + "runtime.override_dir_not_exists": { + "value": 1, + "perSecond": 0.011111111111111112 + }, + "upstream_cx_http1_total": { + "value": 200, + "perSecond": 2.2222222222222223 + }, + "upstream_cx_rx_bytes_total": { + "value": 45185542, + "perSecond": 502061.5777777778 + }, + "upstream_cx_total": { + "value": 200, + "perSecond": 2.2222222222222223 + }, + "upstream_cx_tx_bytes_total": { + "value": 12951360, + "perSecond": 143904 + }, + "upstream_rq_pending_overflow": { + "value": 192, + "perSecond": 2.1333333333333333 + }, + "upstream_rq_pending_total": { + "value": 200, + "perSecond": 2.2222222222222223 + }, + "upstream_rq_total": { + "value": 287808, + "perSecond": 3197.866666666667 + } + } + }, + { + "testName": "scaling down httproutes to 100 with 20 routes per hostname at 500 rps", + "routes": 100, + "routesPerHostname": 20, + "phase": "scaling-down", + "throughput": 1999.4777777777779, + "totalRequests": 179953, + "latency": { + "max": 61.347839, + "min": 0.350352, + "mean": 0.5134029999999999, + "pstdev": 0.723512, + "percentiles": { + "p50": 0.453935, + "p75": 0.478639, + "p80": 0.48667099999999996, + "p90": 0.532191, + "p95": 0.724031, + "p99": 1.5605110000000002, + "p999": 6.3656950000000005 + } + }, + "resources": { + "envoyGateway": { + "memory": { + "max": 159.91015625, + "min": 148.28125, + "mean": 152.69010416666666 + }, + "cpu": { + "max": 1.1333333333333446, + "min": 1.066666666666644, + "mean": 1.0984126984126914 + } + }, + "envoyProxy": { + "memory": { + "max": 103.7421875, + "min": 103.0078125, + "mean": 103.44661458333333 + }, + "cpu": { + "max": 48.42706517227081, + "min": 46.78797542871779, + "mean": 47.43269954796724 + } + } + }, + "poolOverflow": 47, + "upstreamConnections": 37, + "counters": { + "benchmark.http_2xx": { + "value": 179953, + "perSecond": 1999.4777777777779 + }, + "benchmark.pool_overflow": { + "value": 47, + "perSecond": 0.5222222222222223 + }, + "cluster_manager.cluster_added": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "default.total_match_count": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "membership_change": { + "value": 4, + "perSecond": 0.044444444444444446 + }, + "runtime.load_success": { + "value": 1, + "perSecond": 0.011111111111111112 + }, + "runtime.override_dir_not_exists": { + "value": 1, + "perSecond": 0.011111111111111112 + }, + "upstream_cx_http1_total": { + "value": 37, + "perSecond": 0.4111111111111111 + }, + "upstream_cx_rx_bytes_total": { + "value": 28252621, + "perSecond": 313918.0111111111 + }, + "upstream_cx_total": { + "value": 37, + "perSecond": 0.4111111111111111 + }, + "upstream_cx_tx_bytes_total": { + "value": 8097885, + "perSecond": 89976.5 + }, + "upstream_rq_pending_overflow": { + "value": 47, + "perSecond": 0.5222222222222223 + }, + "upstream_rq_pending_total": { + "value": 37, + "perSecond": 0.4111111111111111 + }, + "upstream_rq_total": { + "value": 179953, + "perSecond": 1999.4777777777779 + } + } + }, + { + "testName": "scaling down httproutes to 50 with 10 routes per hostname at 300 rps", + "routes": 50, + "routesPerHostname": 10, + "phase": "scaling-down", + "throughput": 1213.4044943820224, + "totalRequests": 107993, + "latency": { + "max": 23.735295, + "min": 0.37063999999999997, + "mean": 0.49363100000000004, + "pstdev": 0.28475799999999996, + "percentiles": { + "p50": 0.45791899999999996, + "p75": 0.477263, + "p80": 0.483407, + "p90": 0.5164949999999999, + "p95": 0.575231, + "p99": 1.3491829999999998, + "p999": 3.8708470000000004 + } + }, + "resources": { + "envoyGateway": { + "memory": { + "max": 154.03125, + "min": 137.33203125, + "mean": 144.51171875 + }, + "cpu": { + "max": 1.2666666666666515, + "min": 1.066666666666644, + "mean": 1.1333333333333244 + } + }, + "envoyProxy": { + "memory": { + "max": 103.5078125, + "min": 103.0078125, + "mean": 103.279296875 + }, + "cpu": { + "max": 31.498524849265436, + "min": 31.498524849265436, + "mean": 31.498524849265436 + } + } + }, + "poolOverflow": 7, + "upstreamConnections": 22, + "counters": { + "benchmark.http_2xx": { + "value": 107993, + "perSecond": 1213.4044943820224 + }, + "benchmark.pool_overflow": { + "value": 7, + "perSecond": 0.07865168539325842 + }, + "cluster_manager.cluster_added": { + "value": 4, + "perSecond": 0.0449438202247191 + }, + "default.total_match_count": { + "value": 4, + "perSecond": 0.0449438202247191 + }, + "membership_change": { + "value": 4, + "perSecond": 0.0449438202247191 + }, + "runtime.load_success": { + "value": 1, + "perSecond": 0.011235955056179775 + }, + "runtime.override_dir_not_exists": { + "value": 1, + "perSecond": 0.011235955056179775 + }, + "upstream_cx_http1_total": { + "value": 22, + "perSecond": 0.24719101123595505 + }, + "upstream_cx_rx_bytes_total": { + "value": 16954901, + "perSecond": 190504.50561797753 + }, + "upstream_cx_total": { + "value": 22, + "perSecond": 0.24719101123595505 + }, + "upstream_cx_tx_bytes_total": { + "value": 4859685, + "perSecond": 54603.20224719101 + }, + "upstream_rq_pending_overflow": { + "value": 7, + "perSecond": 0.07865168539325842 + }, + "upstream_rq_pending_total": { + "value": 22, + "perSecond": 0.24719101123595505 + }, + "upstream_rq_total": { + "value": 107993, + "perSecond": 1213.4044943820224 + } + } + }, + { + "testName": "scaling down httproutes to 10 with 2 routes per hostname at 100 rps", + "routes": 10, + "routesPerHostname": 2, + "phase": "scaling-down", + "throughput": 404.4943820224719, + "totalRequests": 36000, + "latency": { + "max": 19.070975, + "min": 0.393632, + "mean": 0.521772, + "pstdev": 0.373193, + "percentiles": { + "p50": 0.48030300000000004, + "p75": 0.505807, + "p80": 0.514799, + "p90": 0.548639, + "p95": 0.598719, + "p99": 1.2974709999999998, + "p999": 5.102591 + } + }, + "resources": { + "envoyGateway": { + "memory": { + "max": 148.15234375, + "min": 134.84375, + "mean": 141.89518229166666 + }, + "cpu": { + "max": 1.1333333333333449, + "min": 1.0000000000000377, + "mean": 1.066666666666667 + } + }, + "envoyProxy": { + "memory": { + "max": 103.5546875, + "min": 103.04296875, + "mean": 103.24778645833334 + }, + "cpu": { + "max": 11.451342242194794, + "min": 6.591708918838274, + "mean": 9.783392879522161 + } + } + }, + "poolOverflow": 0, + "upstreamConnections": 10, + "counters": { + "benchmark.http_2xx": { + "value": 36000, + "perSecond": 404.4943820224719 + }, + "cluster_manager.cluster_added": { + "value": 4, + "perSecond": 0.0449438202247191 + }, + "default.total_match_count": { + "value": 4, + "perSecond": 0.0449438202247191 + }, + "membership_change": { + "value": 4, + "perSecond": 0.0449438202247191 + }, + "runtime.load_success": { + "value": 1, + "perSecond": 0.011235955056179775 + }, + "runtime.override_dir_not_exists": { + "value": 1, + "perSecond": 0.011235955056179775 + }, + "upstream_cx_http1_total": { + "value": 10, + "perSecond": 0.11235955056179775 + }, + "upstream_cx_rx_bytes_total": { + "value": 5652000, + "perSecond": 63505.61797752809 + }, + "upstream_cx_total": { + "value": 10, + "perSecond": 0.11235955056179775 + }, + "upstream_cx_tx_bytes_total": { + "value": 1620000, + "perSecond": 18202.247191011236 + }, + "upstream_rq_pending_total": { + "value": 10, + "perSecond": 0.11235955056179775 + }, + "upstream_rq_total": { + "value": 36000, + "perSecond": 404.4943820224719 + } + } + } + ] +};