PageSourceSearch

https://www.endurancesoftwares.com/_next/static/chunks/pages/blog/…security-guide-2026-dce7ae1a332ca830e5c1.js

js endurancesoftwares.com collected 2026-10-08 04:27:29 UTC 27,494 bytes, 1 lines download raw bytes

1_N_E=(window.webpackJsonp_N_E=window.webpackJsonp_N_E||[]).push([[158],{"+9Wx":function(e,t,a){"use strict";a.r(t),a.d(t,"default",(function(){return h}));var s=a("nKUr"),r=a("g4pe"),n=a.n(r),i=a("YFqc"),o=a.n(i),c=a("20a2"),l=a("ZfMW"),d=a("viwh"),p=a("fk5Q");function h(){var e=Object(c.useRouter)(),t="https://www.endurancesoftwares.com".concat(e.asPath),a="Next.js Middleware in Production: Routing, Security & Edge Runtime",r="Use Next.js middleware safely in production: match only the requests that need it, enforce clear access boundaries, avoid edge-runtime traps, prevent redirect loops, and measure rollout impact.",i="https://www.endurancesoftwares.com/img/blog-covers/nextjs-middleware-production-routing-security-guide-2026.png";return Object(s.jsxs)(l.a,{children:[Object(s.jsxs)(n.a,{children:[Object(s.jsxs)("title",{children:[a," | Endurance Softwares"]}),Object(s.jsx)("meta",{name:"description",content:r}),Object(s.jsx)("link",{rel:"canonical",href:t}),Object(s.jsx)("meta",{property:"og:locale",content:"en_US"}),Object(s.jsx)("meta",{property:"og:type",content:"article"}),Object(s.jsx)("meta",{property:"og:title",content:"".concat(a," | Endurance Softwares")}),Object(s.jsx)("meta",{property:"og:description",content:r}),Object(s.jsx)("meta",{property:"og:url",content:t}),Object(s.jsx)("meta",{property:"og:site_name",content:"Endurance Softwares"}),Object(s.jsx)("meta",{property:"og:image",content:i}),Object(s.jsx)("meta",{name:"twitter:card",content:"summary_large_image"}),Object(s.jsx)("meta",{name:"twitter:image",content:i})]}),Object(s.jsxs)("main",{className:"middleware-guide",children:[Object(s.jsx)("header",{className:"hero",children:Object(s.jsxs)("div",{className:"container hero-grid",children:[Object(s.jsxs)("div",{children:[Object(s.jsx)("span",{className:"eyebrow",children:"Next.js production engineering"}),Object(s.jsx)("h1",{children:a}),Object(s.jsx)("p",{className:"lead",children:"Middleware is a request boundary, not a second application server. Keep its scope narrow, make its decisions explicit, and give every redirect or block a reason you can test and observe."}),Object(s.jsxs)("div",{className:"actions",children:[Object(s.jsx)("a",{href:"#matcher",children:"Choose the matcher"}),Object(s.jsx)("a",{href:"#checklist",children:"Use the checklist"})]})]}),Object(s.jsxs)("div",{className:"flow","aria-label":"Middleware request flow",children:[Object(s.jsx)("span",{children:"Request"}),Object(s.jsx)("b",{children:"\u2192"}),Object(s.jsx)("span",{children:"Match"}),Object(s.jsx)("b",{children:"\u2192"}),Object(s.jsx)("span",{children:"Decide"}),Object(s.jsx)("b",{children:"\u2192"}),Object(s.jsx)("span",{children:"Continue"})]})]})}),Object(s.jsxs)("div",{className:"container layout",children:[Object(s.jsxs)("aside",{className:"toc",children:[Object(s.jsx)("strong",{children:"In this guide"}),Object(s.jsx)("a",{href:"#matcher",children:"Match deliberately"}),Object(s.jsx)("a",{href:"#boundaries",children:"Access boundaries"}),Object(s.jsx)("a",{href:"#edge",children:"Edge runtime limits"}),Object(s.jsx)("a",{href:"#redirects",children:"Redirect safety"}),Object(s.jsx)("a",{href:"#operations",children:"Rollout and signals"}),Object(s.jsx)("a",{href:"#checklist",children:"Production checklist"})]}),Object(s.jsxs)("article",{children:[Object(s.jsxs)("section",{id:"matcher",children:[Object(s.jsx)("h2",{children:"Match only requests that need a decision"}),Object(s.jsx)("p",{children:"Middleware runs before the route handler or page for the paths it matches, which makes it useful for routing, locale selection, lightweight authorization gates, experiments, and response headers. It also makes an overly broad matcher expensive and risky. Start by naming the small set of route families that need the behavior. Exclude static assets, image optimization paths, health checks, and public endpoints unless there is a concrete reason to include them."}),Object(s.jsx)("pre",{children:Object(s.jsx)("code",{children:'import { NextResponse } from "next/server";\n\nexport function middleware(request) {\n  const requestHeaders = new Headers(request.headers);\n  requestHeaders.set("x-request-id", crypto.randomUUID());\n  return NextResponse.next({ request: { headers: requestHeaders } });\n}\n\nexport const config = {\n  matcher: ["/dashboard/:path*", "/settings/:path*"],\n};'})}),Object(s.jsx)("p",{children:"Write matcher rules as product policy, then test representative URLs. A catch-all expression may look convenient but can accidentally intercept callbacks, assets, or deployment probes. If the objective is a security header for every document response, prefer the platform's header configuration where it is simpler and easier to audit."})]}),Object(s.jsxs)("section",{id:"boundaries",children:[Object(s.jsx)("h2",{children:"Make the middleware decision a clear access boundary"}),Object(s.jsx)("p",{children:"Authentication identifies a requester; authorization decides whether that requester may access a specific resource. Middleware can perform an early redirect when a session is missing, but it should not become the only authorization control. Route handlers and data access still need resource-level checks because requests can arrive through paths or service calls that bypass a browser navigation."}),Object(s.jsxs)("div",{className:"cards",children:[Object(s.jsxs)("div",{children:[Object(s.jsx)("h3",{children:"Public routes"}),Object(s.jsx)("p",{children:"Proceed without session checks; keep their matchers out of the protected set."})]}),Object(s.jsxs)("div",{children:[Object(s.jsx)("h3",{children:"Protected routes"}),Object(s.jsx)("p",{children:"Validate a trusted session and send an unauthenticated visitor to a deliberate sign-in path."})]}),Object(s.jsxs)("div",{children:[Object(s.jsx)("h3",{children:"Sensitive actions"}),Object(s.jsx)("p",{children:"Enforce tenant, role, and capability rules again beside the data or action."})]})]}),Object(s.jsxs)("p",{children:["Use a server-verified cookie or token, never a client-provided role flag. Keep return URLs local and validated, and retain the original path only when it is safe to send a user back there. Our ",Object(s.jsx)(o.a,{href:"/blog/secure-authentication-nextjs-rbac-sessions-2026",children:Object(s.jsx)("a",{children:"Next.js authentication guide"})})," covers the session and RBAC design that should sit behind this early gate."]})]}),Object(s.jsxs)("section",{id:"edge",children:[Object(s.jsx)("h2",{children:"Design for the edge runtime you actually have"}),Object(s.jsx)("p",{children:"Middleware commonly runs in an edge-like runtime with different APIs, cold-start behavior, dependency supp
1ort, and network constraints from a long-lived Node.js server. Treat it as a fast decision point. Decode and verify only what is necessary, avoid large SDKs and database lookups on every request, and set a small time budget for any unavoidable remote call."}),Object(s.jsxs)("ul",{children:[Object(s.jsx)("li",{children:"Keep dependencies small and compatible with the runtime your host documents."}),Object(s.jsx)("li",{children:"Do not rely on process-local memory for sessions, flags, rate limits, or mutable state."}),Object(s.jsx)("li",{children:"Do not place secrets in rewritten URLs, response headers, logs, or browser-readable cookies."}),Object(s.jsx)("li",{children:"Use a stable request ID to connect middleware decisions with downstream logs."})]}),Object(s.jsxs)("p",{children:["When a request needs database access or a multi-step policy decision, let middleware route it to a normal server boundary rather than silently turning the edge into an application bottleneck. For safe secret handling across that boundary, see our ",Object(s.jsx)(o.a,{href:"/blog/nextjs-environment-variables-secret-management-2026",children:Object(s.jsx)("a",{children:"Next.js environment-variables guide"})}),"."]})]}),Object(s.jsxs)("section",{id:"redirects",children:[Object(s.jsx)("h2",{children:"Prevent redirect loops and unsafe rewrites"}),Object(s.jsx)("p",{children:"A redirect changes the browser URL; a rewrite serves a different route while preserving it. Both are powerful, and both need guardrails. First decide whether a user, crawler, API client, or internal callback should receive the behavior. Then make the decision idempotent: the destination must not immediately satisfy the same condition and redirect again."}),Object(s.jsxs)("div",{className:"callout",children:[Object(s.jsx)("strong",{children:"Redirect safety rule:"})," exclude the destination routes from the matcher or detect them explicitly, preserve only approved local return paths, and test expired sessions, malformed cookies, and deep links."]}),Object(s.jsxs)("p",{children:["Use permanent redirects only for durable URL moves. Authentication redirects, experiments, locale selection, and maintenance states are temporary and should retain an appropriate status. If middleware adds headers such as CSP or request identifiers, verify that it does not overwrite headers set later in the response pipeline. The staged rollout guidance in our ",Object(s.jsx)(o.a,{href:"/blog/nextjs-content-security-policy-csp-guide-2026",children:Object(s.jsx)("a",{children:"Next.js CSP guide"})})," is a useful pattern for sensitive response changes."]})]}),Object(s.jsxs)("section",{id:"operations",children:[Object(s.jsx)("h2",{children:"Release middleware as a measurable infrastructure change"}),Object(s.jsx)("p",{children:"Because middleware can affect a large portion of traffic, release it with the same care as a gateway rule. Start with a narrow matcher or a non-blocking observation mode. Log a stable decision name, route template, outcome, latency, and release identifier\u2014never the raw token or personal data that informed the decision. Compare the error rate, redirect rate, and latency against a baseline before broadening the rule."}),Object(s.jsxs)("p",{children:["Build route-level tests for public routes, protected routes, callback endpoints, static assets, expired sessions, deep links, and the redirect destination. In staging, test the actual hosting runtime rather than only a local Node.js environment. If a rollout needs targeted exposure, combine it with the controlled cleanup rules in our ",Object(s.jsx)(o.a,{href:"/blog/nextjs-feature-flags-safe-rollouts-experimentation-2026",children:Object(s.jsx)("a",{children:"Next.js feature-flags guide"})}),"."]})]}),Object(s.jsxs)("section",{id:"checklist",children:[Object(s.jsx)("h2",{children:"Next.js middleware production checklist"}),Object(s.jsxs)("div",{className:"checklist",children:[Object(s.jsx)("p",{children:"\u2713 Matchers name only the routes that need middleware"}),Object(s.jsx)("p",{children:"\u2713 Static assets, callbacks, and probes are deliberately excluded"}),Object(s.jsx)("p",{children:"\u2713 Middleware handles early gates; routes still authorize resources"}
1),Object(s.jsx)("p",{children:"\u2713 Edge-compatible dependencies and short time budgets are used"}),Object(s.jsx)("p",{children:"\u2713 Redirect destinations cannot re-trigger the same redirect"}),Object(s.jsx)("p",{children:"\u2713 Return URLs are local, validated, and free of sensitive data"}),Object(s.jsx)("p",{children:"\u2713 Decision logs include safe, stable operational fields"}),Object(s.jsx)("p",{children:"\u2713 Staging and rollout tests cover real hosting behavior"})]})]}),Object(s.jsxs)("section",{className:"cta",children:[Object(s.jsx)("h2",{children:"Make every request boundary dependable"}),Object(s.jsx)("p",{children:"Endurance Softwares helps teams build secure, high-performing Next.js applications with practical routing, authentication, observability, and release controls."}),Object(s.jsx)(p.a,{title:"Discuss Your Next.js Architecture",options:["Next.js Development","Security Review","Performance Optimization","Cloud Architecture"],buttonText:"Request a Consultation"})]})]})]})]}),Object(s.jsx)(d.a,{title:a,url:t}),Object(s.jsx)("style",{children:"*{box-sizing:border-box}.middleware-guide{background:#f6faf9;color:#172033;font-family:Arial,Helvetica,sans-serif;line-height:1.75}.container{width:90%;max-width:1160px;margin:auto}.hero{padding:88px 0 76px;color:#fff;background:radial-gradient(circle at 85% 25%,rgba(34,197,94,.3),transparent 31%),radial-gradient(circle at 8% 90%,rgba(6,182,212,.22),transparent 30%),#061b27}.hero-grid{display:grid;grid-template-columns:1.18fr .82fr;gap:56px;align-items:center}.eyebrow{display:inline-block;border:1px solid rgba(255,255,255,.28);border-radius:99px;padding:7px 13px;color:#a7f3d0;font-size:13px;font-weight:800;letter-spacing:.06em;text-transform:uppercase}h1{margin:18px 0;font-size:49px;line-height:1.08;letter-spacing:-1.4px}.lead{max-width:720px;color:#d8f5ee;font-size:19px}.actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:28px}.actions a{border-radius:10px;padding:12px 18px;background:#a7f3d0;color:#064e3b;font-weight:800;text-decoration:none}.actions a+a{border:1px solid rgba(255,255,255,.35);background:transparent;color:#fff}.flow{display:flex;flex-wrap:wrap;gap:9px;align-items:center;padding:25px;border:1px solid rgba(255,255,255,.16);border-radius:18px;background:rgba(6,27,39,.7);box-shadow:0 25px 65px rgba(0,0,0,.28)}.flow span{padding:8px 10px;border-radius:8px;background:rgba(255,255,255,.1);font-size:14px;font-weight:700}.flow b{color:#6ee7b7}.layout{display:grid;grid-template-columns:220px minmax(0,1fr);gap:58px;padding:64px 0 90px}.toc{position:sticky;top:28px;align-self:start;padding:18px;border-radius:12px;background:#fff;box-shadow:0 3px 18px rgba(15,23,42,.07)}.toc strong,.toc a{display:block}.toc a{margin-top:10px;color:#047857;font-size:14px;text-decoration:none}article{min-width:0}section{margin-bottom:52px;scroll-margin-top:28px}h2{margin:0 0 16px;color:#111827;font-size:30px;line-height:1.2}h3{margin:0 0 7px;color:#111827;font-size:18px}p{margin:0 0 16px}article a{color:#047857;font-weight:700}article code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace}.cards,.checklist{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin:24px 0}.cards>div,.callout{padding:18px;border:1px solid #d7ebe2;border-radius:12px;background:#fff}.callout{margin-top:24px;border-left:4px solid #10b981;color:#065f46}pre{overflow:auto;padding:18px;border-radius:12px;background:#111827;color:#e5e7eb;font-size:14px;line-height:1.55}ul{padding-left:22px}li{margin-bottom:9px}.checklist{grid-template-columns:repeat(2,1fr)}.checklist p{margin:0;padding:15px;border-radius:10px;background:#d1fae5;color:#065f46}.cta{padding:32px;border-radius:16px;color:#e5e7eb;background:#061b27}.cta h2{color:#fff}@media(max-width:850px){.hero{padding:64px 0}.hero-grid,.layout,.cards{grid-template-columns:1fr;gap:30px}.toc{position:static}h1{font-size:38px}}@media(max-width:600px){h1{font-size:33px}.checklist{grid-template-columns:1fr}.layout{padding-top:40px}}"})]})}},"a4+l":function(e,t,a){(window.__NEXT_P=window.__NEXT_P||[]).push(["/blog/nextjs-middleware-production-routing-security-guide-2026",function(){return a("+9Wx")}])},fk5Q:function(e,t,a){"use strict";var s=a("nKUr"),r=a("cpVT"),n=a("q1tI"),i=a("/MKj"),o=a("t+mA");function c(e,t){var a=Object.keys(e);if(Object.getOwnPropertySymbols){var s=Object.getOwnPropertySymbols(e);t&&(s=s.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),a.push.apply(a,s)}return a}function l(e){for(var t=1;t<arguments.length;t++){var a=null!=arguments[t]?arguments[t]:{};
1t%2?c(Object(a),!0).forEach((function(t){Object(r.a)(e,t,a[t])})):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(a)):c(Object(a)).forEach((function(t){Object.defineProperty(e,t,Object.getOwnPropertyDescriptor(a,t))}))}return e}t.a=function(e){var t=e.title,a=void 0===t?"Request Free Consultation":t,c=e.options,d=void 0===c?[]:c,p=e.buttonText,h=void 0===p?"Get Free Consultation":p,b=e.successMessage,u=void 0===b?"Thanks! Your request has been submitted. Our team will contact you soon.":b,j=Object(i.b)(),x=Object(i.c)((function(e){return e.addContact})),m=x.isLoading,g=x.isError,f=x.isAdded,_=Object(n.useState)({name:"",email:"",phone:"",service:"",message:""}),O=_[0],w=_[1],y=Object(n.useState)({type:"",text:""}),v=y[0],k=y[1],N=function(e){return function(t){w((function(a){return l(l({},a),{},Object(r.a)({},e,t.target.value))}))}};return Object(n.useEffect)((function(){return f&&(k({type:"success",text:u}),w({name:"",email:"",phone:"",service:"",message:""})),g&&k({type:"error",text:g}),function(){j(Object(o.b)()),j(Object(o.c)())}}),[f,g,j,u]),Object(s.jsxs)("form",{className:"lead-form",onSubmit:function(e){e.preventDefault(),O.name&&O.email&&O.service&&O.message?j(Object(o.a)({name:O.name,email:O.email,mobileNo:O.phone,projectTitle:O.service,projectDetails:O.message})):k({type:"error",text:"Please fill all required fields before submitting."})},children:[Object(s.jsx)("h3",{children:a}),v.text&&Object(s.jsx)("p",{className:"form-feedback ".concat("success"===v.type?"success":"error"),children:v.text}),Object(s.jsx)("div",{className:"form-group",children:Object(s.jsx)("input",{type:"text",placeholder:"Your Name",required:!0,value:O.name,onChange:N("name")})}),Object(s.jsx)("div",{className:"form-group",children:Object(s.jsx)("input",{type:"email",placeholder:"Email Address",required:!0,value:O.email,onChange:N("email")})}),Object(s.jsx)("div",{className:"form-group",children:Object(s.jsx)("input",{type:"tel",placeholder:"Phone / WhatsApp",value:O.phone,onChange:N("phone")})}),Object(s.jsx)("div",{className:"form-group",children:Object(s.jsxs)("select",{required:!0,value:O.service,onChange:N("service"),children:[Object(s.jsx)("option",{value:"",disabled:!0,children:"What do you want to build?"}),d.map((function(e){return Object(s.jsx)("option",{value:e,children:e},e)}))]})}),Object(s.jsx)("div",{className:"form-group",children:Object(s.jsx)("textarea",{placeholder:"Tell us about your idea",required:!0,value:O.message,onChange:N("message")})}),Object(s.jsx)("button",{className:"form-btn",type:"submit",disabled:m,children:m?"Submitting...":h}),Object(s.jsx)("style",{children:"\n        .lead-form {\n          width: 100%;\n          max-width: 560px;\n          margin: 0 auto;\n          padding: 24px;\n          border-radius: 20px;\n          background: #ffffff;\n          border: 1px solid rgba(148, 163, 184, 0.22);\n          box-shadow: 0 18px 55px rgba(2, 6, 23, 0.12);\n        }\n\n        .lead-form h3 {\n          margin: 0 0 12px;\n          font-size: 22px;\n          line-height: 1.25;\n          letter-spacing: -0.5px;\n          color: #0b1220;\n        }\n\n        .form-feedback {\n          margin: 0 0 14px;\n          padding: 10px 12px;\n          border-radius: 14px;\n          font-weight: 700;\n          font-size: 14px;\n          border: 1px solid rgba(148, 163, 184, 0.3);\n          background: rgba(248, 250, 252, 1);\n          color: #0b1220;\n        }\n\n        .form-feedback.success {\n          border-color: rgba(34, 197, 94, 0.25);\n          background: rgba(34, 197, 94, 0.12);\n          color: #14532d;\n        }\n\n        .form-feedback.error {\n          border-color: rgba(239, 68, 68, 0.25);\n          background: rgba(239, 68, 68, 0.12);\n          color: #7f1d1d;\n        }\n\n        .form-group {\n          margin-bottom: 12px;\n        }\n\n        .form-group :is(input, select, textarea) {\n          width: 100%;\n          min-height: 46px;\n          padding: 12px 14px;\n          border-radius: 14px;
1\n          border: 1px solid rgba(148, 163, 184, 0.32);\n          background: #ffffff;\n          color: #0b1220;\n          font-size: 15px;\n          font-weight: 600;\n          outline: none;\n          box-shadow: 0 1px 0 rgba(2, 6, 23, 0.02);\n          transition: border-color 0.18s ease, box-shadow 0.18s ease, background-color 0.18s ease;\n        }\n\n        .form-group select {\n          appearance: none;\n          -webkit-appearance: none;\n          background-image: linear-gradient(45deg, transparent 50%, #64748b 50%),\n            linear-gradient(135deg, #64748b 50%, transparent 50%);\n          background-position: calc(100% - 18px) 50%, calc(100% - 13px) 50%;\n          background-size: 6px 6px, 6px 6px;\n          background-repeat: no-repeat;\n          padding-right: 40px;\n        }\n\n        .form-group textarea {\n          min-height: 110px;\n          resize: vertical;\n          padding-top: 12px;\n          line-height: 1.5;\n        }\n\n        .form-group :is(input, select, textarea)::placeholder {\n          color: #64748b;\n          font-weight: 600;\n        }\n\n        .form-group :is(input, select, textarea):focus {\n          border-color: rgba(37, 99, 235, 0.65);\n          box-shadow: 0 0 0 4px rgba(37, 99, 235, 0.14);\n        }\n\n        .form-btn {\n          width: 100%;\n          padding: 13px 16px;\n          border-radius: 14px;\n          border: none;\n          cursor: pointer;\n          background: linear-gradient(90deg, #2563eb, #06b6d4);\n          color: #ffffff;\n          font-weight: 900;\n          font-size: 15px;\n          letter-spacing: -0.2px;\n          box-shadow: 0 18px 45px rgba(37, 99, 235, 0.22);\n          transition: transform 0.18s ease, box-shadow 0.18s ease, opacity 0.18s ease;\n        }\n\n        .form-btn:hover {\n          transform: translateY(-1px);\n          box-shadow: 0 26px 70px rgba(37, 99, 235, 0.26);\n        }\n\n        .form-btn:disabled {\n          opacity: 0.7;\n          cursor: not-allowed;\n          transform: none;\n          box-shadow: none;\n        }\n\n        @media (max-width: 620px) {\n          .lead-form {\n            padding: 18px;\n            border-radius: 18px;\n          }\n\n          .lead-form h3 {\n            font-size: 20px;\n          }\n        }\n      "})]})}},viwh:function(e,t,a){"use strict";var s=a("nKUr");a("q1tI");t.a=function(e){var t=e.url,a=e.title;return Object(s.jsxs)("div",{className:"et_social_sidebar_networks et_social_visible_sidebar et_social_slideright et_social_animated et_social_rectangle et_social_sidebar_slide et_social_sidebar_withcounts et_social_withtotalcount et_social_mobile_off",children:[Object(s.jsxs)("div",{className:"et_social_totalcount et_social_light",children:[Object(s.jsx)("span",{className:"et_social_totalcount_count et_social_total_share","data-post_id":"22"}),Object(s.jsx)("span",{className:"et_social_totalcount_label",children:"Shares"})]}),Object(s.jsxs)("ul",{className:"et_social_icons_container",children:[Object(s.jsx)("li",{className:"et_social_facebook",children:Object(s.jsxs)("a",{href:"http://www.facebook.com/sharer.php?u=".concat(t,"&t=").concat(a),className:"et_social_share et_social_display_count",rel:"nofollow","data-social_name":"facebook","data-post_id":"22","data-social_type":"share","data-location":"sidebar","data-min_count":"1",children:[Object(s.jsx)("i",{className:"et_social_icon et_social_icon_facebook"}),Object(s.jsx)("span",{className:"et_social_overlay"})]})}),Object(s.jsx)("li",{className:"et_social_twitter",children:Object(s.jsxs)("a",{href:"http://twitter.com/share?text=".concat(a,"&url=").concat(t,"&via=Endurance_soft"),className:"et_social_share et_social_display_count",rel:"nofollow","data-social_name":"twitter","data-post_id":"22","data-social_type":"share","data-location":"sidebar","data-min_count":"1",children:[Object(s.jsx)("i",{className:"et_social_icon et_social_icon_twitter"}),Object(s.jsx)("span",{className:"et_social_overlay"})]})}),Object(s.jsx)("li",{className:"et_social_googleplus",children:Object(s.jsxs)("a",{href:"https://plus.google.com/share?url=".concat(t,"&t=").concat(a),className:"et_social_share et_social_display_count",rel:"nofollow","data-social_name":"googleplus","data-
1post_id":"22","data-social_type":"share","data-location":"sidebar","data-min_count":"1",children:[Object(s.jsx)("i",{className:"et_social_icon et_social_icon_googleplus"}),Object(s.jsx)("span",{className:"et_social_overlay"})]})}),Object(s.jsx)("li",{className:"et_social_evernote",children:Object(s.jsxs)("a",{href:"http://www.evernote.com/clip.action?url=".concat(t,"&title=").concat(a),className:"et_social_share et_social_display_count",rel:"nofollow","data-social_name":"evernote","data-post_id":"22","data-social_type":"share","data-location":"sidebar","data-min_count":"1",children:[Object(s.jsx)("i",{className:"et_social_icon et_social_icon_evernote"}),Object(s.jsx)("span",{className:"et_social_overlay"})]})}),Object(s.jsx)("li",{className:"et_social_pinterest",children:Object(s.jsxs)("a",{href:"#",className:"et_social_share_pinterest et_social_display_count",rel:"nofollow","data-social_name":"pinterest","data-post_id":"22","data-social_type":"share","data-location":"sidebar","data-min_count":"1",children:[Object(s.jsx)("i",{className:"et_social_icon et_social_icon_pinterest"}),Object(s.jsx)("span",{className:"et_social_overlay"})]})}),Object(s.jsx)("li",{className:"et_social_gmail",children:Object(s.jsxs)("a",{href:"https://mail.google.com/mail/u/0/?view=cm&fs=1&su=".concat(a,"&body=").concat(t,"&ui=2&tf=1"),className:"et_social_share et_social_display_count",rel:"nofollow","data-social_name":"gmail","data-post_id":"22","data-social_type":"share","data-location":"sidebar","data-min_count":"1",children:[Object(s.jsx)("i",{className:"et_social_icon et_social_icon_gmail"}),Object(s.jsx)("span",{className:"et_social_overlay"})]})}),Object(s.jsx)("li",{className:"et_social_reddit",children:Object(s.jsxs)("a",{href:"http://www.reddit.com/submit?url=".concat(t,"&title=").concat(a),className:"et_social_share et_social_display_count",rel:"nofollow","data-social_name":"reddit","data-post_id":"22","data-social_type":"share","data-location":"sidebar","data-min_count":"1",children:[Object(s.jsx)("i",{className:"et_social_icon et_social_icon_reddit"}),Object(s.jsx)("span",{className:"et_social_overlay"})]})}),Object(s.jsx)("li",{className:"et_social_vkontakte",children:Object(s.jsxs)("a",{href:"http://vk.com/share.php?url=".concat(t),className:"et_social_share et_social_display_count",rel:"nofollow","data-social_name":"vkontakte","data-post_id":"22","data-social_type":"share","data-location":"sidebar","data-min_count":"1",children:[Object(s.jsx)("i",{className:"et_social_icon et_social_icon_vkontakte"}),Object(s.jsx)("span",{className:"et_social_overlay"})]})}),Object(s.jsx)("li",{className:"et_social_linkedin",children:Object(s.jsxs)("a",{href:"http://www.linkedin.com/shareArticle?mini=true&url=".concat(t,"&title=").concat(a),className:"et_social_share et_social_display_count",rel:"nofollow","data-social_name":"linkedin","data-post_id":"22","data-social_type":"share","data-location":"sidebar","data-min_count":"1",children:[Object(s.jsx)("i",{className:"et_social_icon et_social_icon_linkedin"}),Object(s.jsx)("span",{className:"et_social_overlay"})]})}),Object(s.jsx)("li",{className:"et_social_tumblr",children:Object(s.jsxs)("a",{href:"https://www.tumblr.com/share?v=3&u=".concat(t,"&t=").concat(a),className:"et_social_share et_social_display_count",rel:"nofollow","data-social_name":"tumblr","data-post_id":"22","data-social_type":"share","data-location":"sidebar","data-min_count":"1",children:[Object(s.jsx)("i",{className:"et_social_icon et_social_icon_tumblr"}),Object(s.jsx)("span",{className:"et_social_overlay"})]})})]}),Object(s.jsx)("span",{className:"et_social_hide_sidebar et_social_icon"})]})}}},[["a4+l",0,2,1,3,4,5,6,7,8]]]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.