1/*! For license information please see 99d087c6.554119c4.js.LICENSE.txt */ 2"use strict";(self.webpackChunkdevelopers_basistheory_com=self.webpackChunkdevelopers_basistheory_com||[]).push([[3637],{39642:(e,n,a)=>{a.r(n),a.d(n,{assets:()=>d,contentTitle:()=>c,default:()=>h,frontMatter:()=>o,metadata:()=>t,toc:()=>u});const t=JSON.parse('{"id":"guides/govern/control-data-access","title":"Control Data Access","description":"This guide will show you how to use granular permissions to control access to your data.","source":"@site/docs/guides/govern/control-data-access.mdx","sourceDirName":"guides/govern","slug":"/guides/govern/control-data-access","permalink":"/docs/guides/govern/control-data-access","draft":false,"unlisted":false,"tags":[],"version":"current","lastUpdatedAt":1790020069000,"frontMatter":{},"sidebar":"docs","previous":{"title":"Analyze Data","permalink":"/docs/guides/process/analyze-data"},"next":{"title":"Audit Data Access","permalink":"/docs/guides/govern/audit-data-access"}}');var s=a(74848),r=a(28453),i=a(85202),l=a(49160);const o={},c="Control Data Access",d={},u=[{value:"Getting Started",id:"getting-started",level:2},{value:"Create a Private Application",id:"create-a-private-application",level:2},{value:"Create Tokens",id:"create-tokens",level:2},{value:"Retrieve Tokens",id:"retrieve-tokens",level:2},{value:"Conclusion",id:"conclusion",level:2},{value:"Learn More",id:"learn-more",level:2}];function p(e){const n={a:"a",code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,r.R)(),...e.components};return(0,s.jsxs)(s.Fragment,{children:[(0,s.jsx)(n.header,{children:(0,s.jsx)(n.h1,{id:"control-data-access",children:"Control Data Access"})}),"\n",(0,s.jsx)(n.p,{children:"This guide will show you how to use granular permissions to control access to your data."}),"\n",(0,s.jsx)(n.p,{children:"Key concepts in this guide:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/docs/api/applications",children:"Applications"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/docs/concepts/access-controls",children:"Access Controls"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/docs/concepts/what-are-containers",children:"Token Containers"})}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"getting-started",children:"Getting Started"}),"\n",(0,s.jsx)(n.p,{children:"To get started, you will need a Basis Theory account."}),"\n",(0,s.jsx)(l.W,{}),"\n",(0,s.jsxs)(n.p,{children:["Next you will need a ",(0,s.jsx)(n.a,{href:"/docs/api/applications#application-types",children:"Management Application"})," in order to provision the components in this guide."]}),"\n",(0,s.jsxs)(n.p,{children:[(0,s.jsx)(n.a,{href:"https://portal.basistheory.com/applications/create?application_template_id=931b306f-6be7-405d-9a8d-1442a99dd2d7",children:"Click here"})," to create a Management Application or ",(0,s.jsx)(n.a,{href:"https://portal.basistheory.com/applications",children:"login to your Basis Theory account"})," and create a new application from the ",(0,s.jsx)(n.strong,{children:"Full Management Access"})," template."]}),"\n",(0,s.jsx)(i.F,{children:"Save the API Key from the created Management Application as it will be used in this guide to provision the next step."}),"\n",(0,s.jsx)(n.h2,{id:"create-a-private-application",children:"Create a Private Application"}),"\n",(0,s.jsxs)(n.p,{children:["We need a ",(0,s.jsx)(n.a,{href:"/docs/concepts/access-controls#application-type",children:"Private Application"})," to create and retrieve tokens:"]}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-shell",metastring:"showLineNumbers",children:'curl "https://api.basistheory.com/applications" \\\n -H "BT-API-KEY: <API_KEY>" \\\n -H "Content-Type: application/json" \\\n -X "POST" \\\n -d \'{\n "name": "Control Access Private App",\n "type": "private",\n "rules": [{\n "container": "/",\n "description": "Create Tokens",\n "permissions": [\n "token:create"\n ],\n "priority": 1,\n "transform": "mask"\n },\n {\n "container": "/users/government/",\n "description": "Read Redacted Users",\n "permissions": [\n "token:read"\n ],\n "priority": 2,\n "transform": "redact"\n },\n {\n "container": "/users/employees/",\n "description": "Read Revealed Users",\n "permissions": [\n "token:read"\n ],\n "priority": 3,\n "transform": "reveal"\n },\n {\n "container": "/users/",\n "description": "Read Masked Users",\n "permissions": [\n "token:read"\n ],\n "priority": 4,\n "transform": "mask"\n }]\n }\'\n'})}),"\n",(0,s.jsxs)(i.F,{children:["Be sure to replace ",(0,s.jsx)("code",{children:"<API_KEY>"})," with the Management API Key you created in the ",(0,s.jsx)("a",{href:"#getting-started",children:"Getting Started"})," step."]}),"\n",(0,s.jsx)(i.F,{children:"Save the API Key from the created Private Application as it will be used in this guide to create and list tokens."}),"\n",(0,s.jsx)(n.p,{children:"This will create a Private Application with the following access rules in the following priority order:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Allow creation of tokens on any container under ",(0,s.jsx)(n.code,{children:"/"})," root"]}),"\n",(0,s.jsxs)(n.li,{children:["Allow reads of users in the ",(0,s.jsx)(n.code,{children:"/u
2sers/government/"})," container, but the data will be redacted"]}),"\n",(0,s.jsxs)(n.li,{children:["Allow reads of users in the ",(0,s.jsx)(n.code,{children:"/users/employees/"})," container, and the data will be revealed"]}),"\n",(0,s.jsxs)(n.li,{children:["Allow reads of users in the ",(0,s.jsx)(n.code,{children:"/users/"})," container, and the data will be masked"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"create-tokens",children:"Create Tokens"}),"\n",(0,s.jsx)(n.p,{children:"Now we want to create some tokens that will match the access rules on our Private Application we created."}),"\n",(0,s.jsx)(n.p,{children:"Run the following in your terminal to create some tokens:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-shell",metastring:"showLineNumbers",children:'curl "https://api.basistheory.com/tokenize" \\\n-X "POST" \\\n-H "BT-API-KEY: <API_KEY>" \\\n-H "Content-Type: application/json" \\\n-d \'[{\n "type": "token",\n "data": {\n "first_name": "Luke",\n "last_name": "Skywalker",\n "social_security_number": "111-22-3333",\n "email_address": "[email protected]"\n },\n "mask": {\n "first_name": "{{ data.first_name }}",\n "last_name": "{{ data.last_name | slice: 0 }}",\n "social_security_number": "{{ data.social_security_number | reveal_last: 4 }}",\n "email_address": "{{ data.email_address | split: \'\\\'\'@\'\\\'\' | last }}"\n },\n "containers": [\n "/users/jedis/"\n ]\n}, {\n "type": "token",\n "data": {\n "first_name": "Han",\n "last_name": "Solo",\n "social_security_number": "444-55-6666",\n "email_address": "[email protected]"\n },\n "mask": {\n "first_name": "{{ data.first_name }}",\n "last_name": "{{ data.last_name | slice: 0 }}",\n "social_security_number": "{{ data.social_security_number | reveal_last: 4 }}",\n "email_address": "{{ data.email_address | split: \'\\\'\'@\'\\\'\' | last }}"\n },\n "containers": [\n "/users/employees/"\n ]\n}, {\n "type": "token",\n "data": {\n "first_name": "Leia",\n "last_name": "Organa",\n "social_security_number": "777-88-9999",\n "email_address": "[email protected]"\n },\n "mask": {\n "first_name": "{{ data.first_name }}",\n "last_name": "{{ data.last_name | slice: 0 }}",\n "social_security_number": "{{ data.social_security_number | reveal_last: 4 }}",\n "email_address": "{{ data.email_address | split: \'\\\'\'@\'\\\'\' | last }}"\n }
2,\n "metadata": {\n "senate_seat": "Alderaan"\n },\n "containers": [\n "/users/government/"\n ]\n}, {\n "type": "token",\n "data": {\n "first_name": "Boba",\n "last_name": "Fett",\n "social_security_number": "123-45-6789",\n "email_address": "[email protected]"\n },\n "containers": [\n "/bounty-hunters/"\n ]\n}]\'\n'})}),"\n",(0,s.jsxs)(i.F,{children:["Be sure to replace ",(0,s.jsx)("code",{children:"<API_KEY>"})," with the Private API Key you created in the ",(0,s.jsx)("a",{href:"#create-a-private-application",children:"Create a Private Application"})," step."]}),"\n",(0,s.jsx)(n.h2,{id:"retrieve-tokens",children:"Retrieve Tokens"}),"\n",(0,s.jsx)(n.p,{children:"Finally, let's retrieve our data."}),"\n",(0,s.jsx)(n.p,{children:"Run the following in your terminal to list all tokens:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-shell",metastring:"showLineNumbers",children:'curl "https://api.basistheory.com/tokens" \\\n -H "BT-API-KEY: <API_KEY>"\n'})}),"\n",(0,s.jsxs)(i.F,{children:["Be sure to replace ",(0,s.jsx)("code",{children:"<API_KEY>"})," with the Private API Key you created in the ",(0,s.jsx)("a",{href:"#create-a-private-application",children:"Create a Private Application"})," step."]}),"\n",(0,s.jsx)(n.p,{children:"You should see a JSON response similar to:"}),"\n",(0,s.jsx)(n.pre,{children:(0,s.jsx)(n.code,{className:"language-json",metastring:"showLineNumbers",children:'{\n "pagination": {\n "total_items": 3,\n "page_number": 1,\n "page_size": 20,\n "total_pages": 1\n },\n "data": [\n {\n "id": "546b2528-8e57-4bd5-b607-db639d126696",\n "type": "token",\n "tenant_id": "306b9c97-f974-4a87-b7b5-7f286333c4a4",\n "metadata": {\n "senate_seat": "Alderaan"\n },\n "created_by": "51df57ce-ef0f-47ff-b523-a08ecb9bad8a",\n "created_at": "2022-12-22T15:07:46.6158347+00:00",\n "fingerprint": "BF2ktSAXbUEdhNdkX58fwUxYSfXYK5XoUjx5zQawZBYN",\n "fingerprint_expression": "{{ data | stringify }}",\n "mask": {\n "first_name": "{{ data.first_name }}",\n "last_name": "{{ data.last_name | slice: 0 }}",\n "social_security_number": "{{ data.social_security_number | reveal_last: 4 }}",\n "email_address": "{{ data.email_address | split: \'@\' | last }}"\n },\n "containers": [\n "/users/government/"\n ]\n },\n {\n "id": "be637207-540a-4920-aabe-ca734383712a",\n "type": "token",\n "tenant_id": "306b9c97-f974-4a87-b7b5-7f286333c4a4",\n "data": {\n "first_name": "Han",\n "last_name": "Solo",\n "social_security_number": "444-55-6666",\n "email_address": "[email protected]"\n },\n "created_by": "51df57ce-ef0f-47ff-b523-a08ecb9bad8a",\n "created_at": "2022-12-22T15:07:46.6158347+00:00",\n "fingerprint": "CKwnVWvDhR9ishqSHo39Z42wGenevTnuqDHsMu7i6f7z",\n "fingerprint_expression": "{{ data | stringify }}",\n "mask": {\n "first_name": "{{ data.first_name }}",\n "last_name": "{{ data.last_name | slice: 0 }}",\n "social_security_number": "{{ data.social_security_number | reveal_last: 4 }}",\n "email_address": "{{ data.email_address | split: \'@\' | last }}"\n },\n "containers": [\n "/users/employees/"\n ]\n },\n {\n "id": "da06ec46-282c-45e3-a79c-8e1fd8f3b356",\n "type": "token",\n "tenant_id": "306b9c97-f974-4a87-b7b5-7f286333c4a4",\n "data": {\n "first_name": "Luke",\n "last_name": "S",\n "social_security_number": "XXX-XX-3333",\n "email_address": "skywalkerranch.com"\n },\n "created_by": "51df57ce-ef0f-47ff-b523-a08ecb9bad8a",\n "created_at": "2022-12-22T15:07:46.6158347+00:00",\n "fingerprint": "BKUzzMpHBJnnidoXv32kxfCnzksNce729bCQJN7A6Ttf",\n "fingerprint_expression": "{{ data | stringify }}",\n "mask": {\n "first_name": "{{ data.first_name }}",\n "last_name": "{{ data.last_name | slice: 0 }}",\n "social_security_number": "{{ data.social_security_number | reveal_last: 4 }}",\n "email_address": "{{ data.email_address | split: \'@\' | last }}"\n },\n "containers": [\n "/users/jedis/"\n ]\n }\n ]\n}\n'})}),"\n",(0,s.jsx)(n.p,{children:"Notice the following rules were applied:"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsxs)(n.li,{children:["Leia Organa's user record was redacted because it matched the ",(0,s.jsx)(n.code,{children:"/u
2sers/government/"})," rule"]}),"\n",(0,s.jsxs)(n.li,{children:["Han Solo's user record was revealed because it matched the ",(0,s.jsx)(n.code,{children:"/users/employees/"})," rule"]}),"\n",(0,s.jsxs)(n.li,{children:["Luke Skywalkers's user record was masked because it matched the ",(0,s.jsx)(n.code,{children:"/users/"})," rule and did not match any of the more specific container rules above"]}),"\n",(0,s.jsxs)(n.li,{children:["Boba Fett's record was not returned because there was no ",(0,s.jsx)(n.code,{children:"token:read"})," permission on any rule for the ",(0,s.jsx)(n.code,{children:"/bounty-hunters/"})," container"]}),"\n"]}),"\n",(0,s.jsx)(n.h2,{id:"conclusion",children:"Conclusion"}),"\n",(0,s.jsxs)(n.p,{children:["You can use one of Basis Theory's many ",(0,s.jsx)(n.a,{href:"https://portal.basistheory.com/applications",children:"pre-built Application templates"})," to get started quickly or customize ",(0,s.jsx)(n.a,{href:"/docs/concepts/access-controls",children:"Access Controls"})," to provide granular permissions around your data."]}),"\n",(0,s.jsx)(n.h2,{id:"learn-more",children:"Learn More"}),"\n",(0,s.jsxs)(n.ul,{children:["\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/docs/concepts/access-controls",children:"Access Controls"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/docs/guides/share/display-masked-data",children:"Display Masked Data"})}),"\n",(0,s.jsx)(n.li,{children:(0,s.jsx)(n.a,{href:"/docs/expressions",children:"Expressions"})}),"\n"]})]})}function h(e={}){const{wrapper:n}={...(0,r.R)(),...e.components};return n?(0,s.jsx)(n,{...e,children:(0,s.jsx)(p,{...e})}):p(e)}},21020:(e,n,a)=>{var t=a(96540),s=Symbol.for("react.element"),r=Symbol.for("react.fragment"),i=Object.prototype.hasOwnProperty,l=t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,o={key:!0,ref:!0,__self:!0,__source:!0};function c(e,n,a){var t,r={},c=null,d=null;for(t in void 0!==a&&(c=""+a),void 0!==n.key&&(c=""+n.key),void 0!==n.ref&&(d=n.ref),n)i.call(n,t)&&!o.hasOwnProperty(t)&&(r[t]=n[t]);if(e&&e.defaultProps)for(t in n=e.defaultProps)void 0===r[t]&&(r[t]=n[t]);return{$$typeof:s,type:e,key:c,ref:d,props:r,_owner:l.current}}n.Fragment=r,n.jsx=c,n.jsxs=c},74848:(e,n,a)=>{e.exports=a(21020)},49160:(e,n,a)=>{a.d(n,{W:()=>i});var t=a(96540),s=a(21867);const r="container_uGCt",i=()=>t.createElement("div",{className:r},t.createElement("div",null,t.createElement(s.$,{href:"https://portal.basistheory.com/register",target:"_blank"},"Sign Up")),t.createElement("div",null,t.createElement(s.$,{href:"https://portal.basistheory.com/",target:"_blank",variant:"secondary"},"Sign In")))},85202:(e,n,a)=>{a.d(n,{F:()=>N,W:()=>C});var t=a(34164),s=a(96540);const r="container_ygYU",i="title_KE4f",l="content_mpoX",o="error_YPD5",c="warning_Vv3u",d="info_XpSc",u="success_pFpA",p="neutral_bgLU",h="svg_xN_H";var m;function f(){return f=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var a=arguments[n];for(var t in a)({}).hasOwnProperty.call(a,t)&&(e[t]=a[t])}return e},f.apply(null,arguments)}const _=e=>{let{title:n,titleId:a,...t}=e;return s.createElement("svg",f({xmlns:"http://www.w3.org/2000/svg",width:18,height:18,fill:"none",viewBox:"0 0 18 18","aria-labelledby":a},t),n?s.createElement("title",{id:a},n):null,m||(m=s.createElement("path",{fill:"#F56C9D",fillRule:"evenodd",d:"M9 1.438A7.557 7.557 0 0 0 1.438 9 7.557 7.557 0 0 0 9 16.563 7.56 7.56 0 0 0 16.563 9 7.56 7.56 0 0 0 9 1.438M.063 9A8.93 8.93 0 0 1 9 .063 8.937 8.937 0 0 1 17.938 9 8.937 8.937 0 0 1 9 17.938 8.93 8.93 0 0 1 .063 9M9 4.188c.38 0 .688.307.688.687v4.583a.687.687 0 1 1-1.376 0V4.875c0-.38.308-.687.688-.687m-.006 7.791H9q.034 0 .067.003c.444.038.85.4.85.914 0 .27-.122.496-.272.645a.92.92 0 0 1-.645.271.92.92 0 0 1-.917-.916.914.914 0 0 1 .908-.917z",clipRule:"evenodd"})))};var v,g;function y(){return y=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var a=arguments[n];for(var t in a)({}).hasOwnProperty.call(a,t)&&(e[t]=a[t])}return e},y.apply(null,arguments)}const b=e=>{let{title:n,titleId:a,...t}=e;return s.createElement("svg",y({xmlns:"http://www.w3.org/2000/svg",width:20,height:18,fill:"none",viewBox:"0 0 20 18","aria-labelledby":a},t),n?s.createElement("title",{id:a},n):null,v||(v=s.createElement("path",{fill:"#FFA726",fillRule:"evenodd",d:"M7.656 1.614c1.04-1.809 3.649-1.809 4.689 0l7.055 12.27c1.037 1.803-.264 4.053-2.344 4.053H2.945c-2.08 0-3.381-2.25-2.345-4.052zm3.497.685a1.33 1.33 0 0 0-2.305 0L1.792 14.57a1.33 1.33 0 0 0 1.153 1.992h14.111a1.33 1.33 0 0 0 1.152-1.992z",clipRule:"evenodd"})),g||(g=s.createElement("path",{fill:"#FFA726",fillRule:"evenodd",d:"M10.001 5.883c.38 0 .688.308.688.688v3.428a.687.687 0 1 1-1.376 0V6.571c0-.38.308-.688.688-.688m-.006 6.183H10q.034 0 .068.003c.443.038.849.4.849.914 0 .27-.122.496-.271.645A.92.92 0 0 1 10 13.9a.92.92 0 0 1-.917-.916.914.914 0 0 1 .908-.917z",clipRule:"evenodd"})))};var x,j;function w(){return w=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var a=arguments[n];for(var t in a)({}).hasOwnProperty.call(a,t)&&(e[t]=a[t])}return e},w.apply(null,arguments)}const k=e=>{let{title:n,titleId:a,...t}=e;return s.createElement("svg",w({xmlns:"http://www.w3.org/2000/svg",width:18,height:18,fill:"none",viewBox:"0 0 18 18","aria-labelledby":a},t),n?s.createElement("title",{id:a},n):null,x||(x=s.createElement("path",{fill:"#00B68A",fillRule:"evenodd",d:"M5.58.743a8.937 8.937 0 1 1 6.84 16.514A8.937 8.937 0 0 1 5.58.743M9 1.438a7.562 7.562 0 1 0 0 15.124A7.562 7.562 0 0 0 9 1.437",clipRule:"evenodd"})),j||(j=s.createElement("path",{fill:"#00B68A",fillRule:"evenodd",d:"M12.664 6.31c.268.268.269.703 0 .972l-4.34 4.35a.69.69 0 0 1-1.087.151l-.018-.018L5.25 9.797a.688.688 0 1 1 .972-.972l1.481 1.481 3.987-3.995a.69.69 0 0 1 .973-.001",clipRule:"evenodd"})))};var A,E;function P(){return P=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var a=arguments[n];for(var t in a)({}).hasOwnProperty.call(a,t)&&(e[t]=a[t])}return e},P.apply(null,arguments)}const R=e=>{let{title:n,titleId:a,...t}=e;return s.createElement("svg",P({xmlns:"http://www.w3.org/2000/svg",width:18,height:18,fill:"none",viewBox:"0 0 18 18","aria-labelledby":a},t),n?s.createElement("title",{id:a},n):null,A||(A=s.createElement("path",{fill:"#29B6F6",fillRule:"evenodd",d:"M9.45 4.966a.69.69 0 0 0-.587-.33.914.914 0 0 0-.917.917.92.92 0 0 0 .917.917c.27 0 .495-.122.645-.271a.92.92 0 0 0 .271-.646.69.69 0 0 0-.33-.587M7.396 12.208c0-.38.308-.687.687-.687h2.118a.687.687 0 1 1 0 1.375H8.083a.69.69 0 0 1-.687-.688",clipRule:"evenodd"})),E||(E=s.createElement("path",{fill:"#29B6F6",fillRule:"evenodd",d:"M5.58.743a8.937 8.937 0 1 1 6.84 16.514A8.937 8.937 0 0 1 5.58.743M9 1.438a7.562 7.562 0 1 0 0 15.124A7.562 7.562 0 0 0 9 1.437m-.495 4.479a.687.687 0 0 0 1.265-.373.91.91 0 0 0-.97-.905.687.687 0 0 0-.295 1.278m-1.1 2.396c0-.38.307-.688.687-.688h1.054c.38 0 .687.308.687.688v3.895a.687.687 0 1 1-1.375 0V9h-.366a.69.69 0 0 1-.688-.687",clipRule:"evenodd"})))};
2var C=function(e){return e.ERROR="error",e.WARNING="warning",e.INFO="info",e.SUCCESS="success",e.NEUTRAL="neutral",e}({});const N=({type:e="info",title:n,content:a,children:m})=>{const f=(0,t.A)({[o]:"error"==e,[c]:"warning"==e,[d]:"info"==e,[u]:"success"==e,[p]:"neutral"==e}),v={error:_,warning:b,info:R,success:k}[e];return s.createElement("div",{className:(0,t.A)([r,f,"alert"])},v&&s.createElement("div",null,s.createElement(v,{className:h})),s.createElement("div",null,n&&s.createElement("div",{className:i},n),s.createElement("div",{className:l},null!=a?a:m)))}},28453:(e,n,a)=>{a.d(n,{R:()=>i,x:()=>l});var t=a(96540);const s={},r=t.createContext(s);function i(e){const n=t.useContext(r);return t.useMemo((function(){return"function"==typeof e?e(n):{...n,...e}}),[n,e])}function l(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(s):e.components||s:i(e.components),t.createElement(r.Provider,{value:n},e.children)}}}]);
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.