1import { Q as QBreadcrumbsEl } from "./QBreadcrumbsEl-DJmFSikN.js"; 2import { B as getCICDJobs, C as deleteCICDJobs } from "./api-EaByEhnn.js"; 3import { G as GridSelect } from "./GridSelect-CjyiI6pi.js"; 4import { z as deepClone, v as valueLabels, y as confirmDelete, h as notifySuccess, C as hasRole } from "./utils-Dl9t6EOZ.js"; 5import { d as distExports } from "./realsyncUtils-B_eb3OgH.js"; 6import { m as mixinsV3 } from "./mixinsV3-DJOx874v.js"; 7import { E as EnvRef } from "./EnvRef-DLnnFTas.js"; 8import { q as defineComponent, s as ref, x as watch, l as computed, _ as _export_sfc, c as createBlock, o as openBlock, w as withCtx, a as createVNode, r as resolveComponent } from "./index-l2g1tnsc.js"; 9import "./http-QV44vcaW.js"; 10import "./api-CsX1TBBI.js"; 11import "./lodash-D-1jTqv6.js"; 12import "./RecordRef-71_FjUo4.js"; 13import "./RecordLink-BhuEBSlE.js"; 14import "./RouteLink-CCU5m11L.js"; 15const _sfc_main = /* @__PURE__ */ defineComponent({ 16 __name: "Jobs", 17 props: { 18 envId: {}, 19 allJobsMode: { type: Boolean } 20 }, 21 setup(__props, { expose: __expose }) { 22 __expose(); 23 const props = __props; 24 const { message, processing, initing, messageType, processForm } = mixinsV3(); 25 const columns = [ 26 { value: "name" }, 27 { value: "status" }, 28 { value: "runStartAt", label: "Last Run Start At", type: "datetime" }, 29 { value: "runEndAt", label: "Last Run End At", type: "datetime" } 30 ]; 31 const records = getRecords; 32 const progressOpen = ref(false); 33 const initingSuccess = ref(true); 34 const filterReq = ref({ status: "" }); 35 const filteredJobs = ref([]); 36 const init = ref(false); 37 const status = ref(""); 38 const jobs = ref([]); 39 const loading = ref(false); 40 const grid = ref(); 41 function hasRole$1() { 42 return computed(() => hasRole([distExports.access.ROLE_MS_ADMIN, distExports.access.ROLE_TENANT_ADMIN, distExports.access.ROLE_MS_USER])); 43 } 44 watch( 45 () => filterReq.value.status, 46 () => { 47 filter(); 48 } 49 ); 50 function getStatusOptions() { 51 return [ 52 { id: "queued", name: "Queued" }, 53 { id: "processing", name: "Processing" }, 54 { id: "completed", name: "Completed" }, 55 { id: "error", name: "Error" }, 56 { id: "aborted", name: "Aborted" } 57 ]; 58 } 59 async function getRecords() { 60 if (!init.value) { 61 init.value = true; 62 await getJobs(); 63 } 64 updateStatus(); 65 return deepClone(filteredJobs); 66 } 67 async function getJobs(force = false) { 68 loading.value = true; 69 filteredJobs.value = jobs.value = await getCICDJobs() || []; 70 filter(); 71 updateStatus(); 72 loading.value = false; 73 force ? refresh() : void 0; 74 } 75 function refresh() { 76 grid.value.refresh(); 77 } 78 function updateStatus() { 79 status.value = `Filter [Status: ${filterReq.value.status ? valueLabels.status[filterReq.value.status] : "All"}]`; 80 } 81 function filter() { 82 const filteredJobs2 = deepClone(jobs.value).filter((job) => { 83 if (filterReq.value.status === "") { 84 return true; 85 } else { 86 return job.runStatus === filterReq.value.status; 87 } 88 }) || []; 89 setFilteredJobs(filteredJobs2 || []); 90 refresh(); 91 } 92 function setFilteredJobs(jobs2) { 93 filteredJobs.value = jobs2; 94 } 95 async function handleDelete(sels) { 96 const list = sels.map((rec) => `<li>${rec.name}</li>`).join(""); 97 const msg = `Are you sure you want to delete following Jobs? <br/><ul> ${list} </ul>`; 98 const result = await confirmDelete("Delete Job?", msg); 99 if (result) { 100 deleteJob(sels); 101 } 102 } 103 function deleteJob(sels, val) { 104 const payload = sels.map((sel) => ({ 105 id: sel.id 106 })); 107 processing.value = true; 108 processForm(async () => { 109 await deleteCICDJobs({ 110 records: payload 111 }); 112 notifySuccess("Jobs have been deleted"); 113 await getJobs(true); 114 }); 115 } 116 const __returned__ = { props, message, processing, initing, messageType, processForm, columns, records, progressOpen, initingSuccess, filterReq, filteredJobs, init, status, jobs, loading, grid, hasRole: hasRole$1, getStatusOptions, getRecords, getJobs, refresh, updateStatus, filter, setFilteredJobs, handleDelete, deleteJob, GridSelect, EnvRef };
117 Object.defineProperty(__returned__, "__isScriptSetup", { enumerable: false, value: true }); 118 return __returned__; 119 } 120}); 121function _sfc_render(_ctx, _cache, $props, $setup, $data, $options) { 122 const _component_Table = resolveComponent("Table"); 123 const _component_Page = resolveComponent("Page"); 124 return openBlock(), createBlock(_component_Page, { 125 title: "CI/CD Jobs", 126 initing: $setup.initing, 127 initingSuccess: $setup.initingSuccess, 128 processing: $setup.processing, 129 message: $setup.message, 130 messageType: $setup.messageType 131 }, { 132 breadcrumbs: withCtx(() => [ 133 createVNode(QBreadcrumbsEl, { 134 label: "Home", 135 to: "/metasync/home" 136 }) 137 ]), 138 default: withCtx(() => [ 139 createVNode(_component_Table, { 140 recordType: "Job", 141 recordTypePlural: "Jobs", 142 ref: "grid", 143 nameLinkPrefix: "/metasync/cicd", 144 columns: $setup.columns, 145 initing: $setup.initing, 146 records: $setup.records, 147 editable: false, 148 creatable: false, 149 onDelete: $setup.handleDelete, 150 audit: "", 151 status: $setup.status, 152 refreshable: false, 153 customRefresh: true, 154 onCustomRefresh: _cache[1] || (_cache[1] = ($event) => $setup.getJobs(true)) 155 }, { 156 "toolbar-actions": withCtx(() => [ 157 createVNode($setup["GridSelect"], { 158 modelValue: $setup.filterReq.status, 159 "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => $setup.filterReq.status = $event), 160 options: $setup.getStatusOptions(), 161 showDefault: "", 162 defaultLabel: "-Status-", 163 defaultValue: "" 164 }, null, 8, ["modelValue", "options"]) 165 ]), 166 field1: withCtx((row) => [ 167 createVNode($setup["EnvRef"], { 168 model: row, 169 field: "envId" 170 }, null, 8, ["model"]) 171 ]), 172 _: 1 173 }, 8, ["initing", "records", "status"]) 174 ]), 175 _: 1 176 }, 8, ["initing", "initingSuccess", "processing", "message", "messageType"]); 177} 178const Jobs = /* @__PURE__ */ _export_sfc(_sfc_main, [["render", _sfc_render], ["__file", "Jobs.vue"]]); 179export { 180 Jobs as default 181}; 182//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSm9icy1mNkltMlI0TC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb2R1Y3RzL21ldGFzeW5jL3BhZ2VzL2NpY2QvSm9icy52dWUiXSwic291cmNlc0NvbnRlbnQiOlsiPHRlbXBsYXRlPlxuICA8UGFnZSB0aXRsZT1cIkNJL0NEIEpvYnNcIiA6aW5pdGluZz1cImluaXRpbmdcIiA6aW5pdGluZ1N1Y2Nlc3M9XCJpbml0aW5nU3VjY2Vzc1wiIDpwcm9jZXNzaW5nPVwicHJvY2Vzc2luZ1wiIDptZXNzYWdlPVwibWVzc2FnZVwiIDptZXNzYWdlVHlwZT1cIm1lc3NhZ2VUeXBlXCI+XG4gICAgPHRlbXBsYXRlIHYtc2xvdDpicmVhZGNydW1icz5cbiAgICAgIDxxLWJyZWFkY3J1bWJzLWVsIGxhYmVsPVwiSG9tZVwiIHRvPVwiL21ldGFzeW5jL2hvbWVcIiAvPlxuICAgIDwvdGVtcGxhdGU+XG4gICAgPFRhYmxlXG4gICAgICByZWNvcmRUeXBlPVwiSm9iXCJcbiAgICAgIHJlY29yZFR5cGVQbHVyYWw9XCJKb2JzXCJcbiAgICAgIHJlZj1cImdyaWRcIlxuICAgICAgbmFtZUxpbmtQcmVmaXg9XCIvbWV0YXN5bmMvY2ljZFwiXG4gICAgICA6Y29sdW1ucz1cImNvbHVtbnNcIlxuICAgICAgOmluaXRpbmc9XCJpbml0aW5nXCJcbiAgICAgIDpyZWNvcmRzPVwicmVjb3Jkc1wiXG4gICAgICA6ZWRpdGFibGU9XCJmYWxzZVwiXG4gICAgICA6Y3JlYXRhYmxlPVwiZmFsc2VcIlxuICAgICAgQGRlbGV0ZT1cImhhbmRsZURlbGV0ZVwiXG4gICAgICBhdWRpdFxuICAgICAgOnN0YXR1cz1cInN0YXR1c1wiXG4gICAgICA6cmVmcmVzaGFibGU9XCJmYWxzZVwiXG4gICAgICA6Y3VzdG9tUmVmcmVzaD1cInRydWVcIlxuICAgICAgQGN1c3RvbVJlZnJlc2g9XCJnZXRKb2JzKHRydWUpXCJcbiAgICA+XG4gICAgICA8dGVtcGxhdGUgdi1zbG90OnRvb2xiYXItYWN0aW9ucz5cbiAgICAgICAgPCEtLSAgICAgICAgPEljb24gQGNsaWNrPVwib3BlbkpvYnNGaWx0ZXJEaWFsb2dcIiBuYW1lPVwiZmlsdGVyXCIgY2xpY2thYmxlIHRvb2x0aXA9XCJGaWx0ZXIgSm9icyBieSBzcGVjaWZpZWQgY3JpdGVyaWFcIiAvPi0tPlxuXG4gICAgICAgIDxHcmlkU2VsZWN0IHYtbW9kZWw9XCJmaWx0ZXJSZXEuc3RhdHVzXCIgOm9wdGlvbnM9XCJnZXRTdGF0dXNPcHRpb25zKClcIiBzaG93RGVmYXVsdCBkZWZhdWx0TGFiZWw9XCItU3RhdHVzLVwiIGRlZmF1bHRWYWx1ZT1cIlwiIC8+XG4gICAgICA8L3RlbXBsYXRlPlxuXG4gICAgICA8dGVtcGxhdGUgdi1zbG90OmZpZWxkMT1cInJvd1wiPlxuICAgICAgICA8RW52UmVmIDptb2RlbD1cInJvd1wiIGZpZWxkPVwiZW52SWRcIiAvPlxuICAgICAgPC90ZW1wbGF0ZT5cbiAgICA8L1RhYmxlPlxuICA8L1BhZ2U+XG48L3RlbXBsYXRlPlxuXG48c2NyaXB0IHNldHVwIGxhbmc9XCJ0c1wiPlxuaW1wb3J0ICogYXMgYXBpIGZyb20gJ3NyYy9wcm9k
182dWN0cy9tZXRhc3luYy9zZXJ2aWNlcy9hcGknO1xuaW1wb3J0IEdyaWRTZWxlY3QgZnJvbSAnc3JjL2NvbXBvbmVudHMvR3JpZFNlbGVjdC52dWUnO1xuaW1wb3J0ICogYXMgdXRpbHMgZnJvbSAnc3JjL3NlcnZpY2VzL3V0aWxzJztcbmltcG9ydCB7YWNjZXNzfSBmcm9tICdAZGF0YXNlcnQvanMtdXRpbHMnO1xuaW1wb3J0IHtkZWVwQ2xvbmUsIERJQUxPR19NT0RFX0FERH0gZnJvbSAnc3JjL3NlcnZpY2VzL3V0aWxzJztcbmltcG9ydCB7Y29tcHV0ZWQsIG9uQmVmb3JlTW91bnQsIHJlZiwgd2F0Y2h9IGZyb20gJ3Z1ZSc7XG5pbXBvcnQgbWl4aW5zVjMgZnJvbSAnc3JjL21peGlucy9taXhpbnNWMyc7XG5pbXBvcnQge0NJQ0RKb2IsIERlcGxveW1lbnR9IGZyb20gJ0BkYXRhc2VydC9qcy11dGlscy9kaXN0L21vZGVsc01zJztcbmltcG9ydCBFbnZSZWYgZnJvbSAnc3JjL2NvbXBvbmVudHMvRW52UmVmLnZ1ZSc7XG5cbmludGVyZmFjZSBQcm9wcyB7XG4gIGVudklkPzogc3RyaW5nO1xuICBhbGxKb2JzTW9kZTogYm9vbGVhbjtcbn1cbmNvbnN0IHByb3BzID0gd2l0aERlZmF1bHRzKGRlZmluZVByb3BzPFByb3BzPigpLCB7fSk7XG5cbmNvbnN0IHttZXNzYWdlLCBwcm9jZXNzaW5nLCBpbml0aW5nLCBtZXNzYWdlVHlwZSwgcHJvY2Vzc0Zvcm19ID0gbWl4aW5zVjMoKTtcblxuY29uc3QgY29sdW1ucyA9IFtcbiAge3ZhbHVlOiAnbmFtZSd9LFxuICB7dmFsdWU6ICdzdGF0dXMnfSxcbiAge3ZhbHVlOiAncnVuU3RhcnRBdCcsIGxhYmVsOiAnTGFzdCBSdW4gU3RhcnQgQXQnLCB0eXBlOiAnZGF0ZXRpbWUnfSxcbiAge3ZhbHVlOiAncnVuRW5kQXQnLCBsYWJlbDogJ0xhc3QgUnVuIEVuZCBBdCcsIHR5cGU6ICdkYXRldGltZSd9LFxuXTtcbmNvbnN0IHJlY29yZHMgPSBnZXRSZWNvcmRzO1xuY29uc3QgcHJvZ3Jlc3NPcGVuID0gcmVmKGZhbHNlKTtcbmNvbnN0IGluaXRpbmdTdWNjZXNzID0gcmVmKHRydWUpO1xuY29uc3QgZmlsdGVyUmVxID0gcmVmKHtzdGF0dXM6ICcnfSk7XG5jb25zdCBmaWx0ZXJlZEpvYnMgPSByZWYoW10gYXMgQ0lDREpvYltdKTtcbmNvbnN0IGluaXQgPSByZWYoZmFsc2UpO1xuY29uc3Qgc3RhdHVzID0gcmVmKCcnKTtcbmNvbnN0IGpvYnMgPSByZWYoW10gYXMgQ0lDREpvYltdKTtcbmNvbnN0IGxvYWRpbmcgPSByZWYoZmFsc2UpO1xuY29uc3QgZ3JpZCA9IHJlZigpO1xuZnVuY3Rpb24gaGFzUm9sZSgpIHtcbiAgcmV0dXJuIGNvbXB1dGVkKCgpID0+IHV0aWxzLmhhc1JvbGUoW2FjY2Vzcy5ST0xFX01TX0FETUlOLCBhY2Nlc3MuUk9MRV9URU5BTlRfQURNSU4sIGFjY2Vzcy5ST0xFX01TX1VTRVJdKSk7XG59XG5cbndhdGNoKFxuICAoKSA9PiBmaWx0ZXJSZXEudmFsdWUuc3RhdHVzLFxuICAoKSA9PiB7XG4gICAgZmlsdGVyKCk7XG4gIH1cbik7XG5cbmZ1bmN0aW9uIGdldFN0YXR1c09wdGlvbnMoKSB7XG4gIHJldHVybiBbXG4gICAge2lkOiAncXVldWVkJywgbmFtZTogJ1F1ZXVlZCd9LF
182xuICAgIHtpZDogJ3Byb2Nlc3NpbmcnLCBuYW1lOiAnUHJvY2Vzc2luZyd9LFxuICAgIHtpZDogJ2NvbXBsZXRlZCcsIG5hbWU6ICdDb21wbGV0ZWQnfSxcbiAgICB7aWQ6ICdlcnJvcicsIG5hbWU6ICdFcnJvcid9LFxuICAgIHtpZDogJ2Fib3J0ZWQnLCBuYW1lOiAnQWJvcnRlZCd9LFxuICBdO1xufVxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVjb3JkcygpIHtcbiAgaWYgKCFpbml0LnZhbHVlKSB7XG4gICAgaW5pdC52YWx1ZSA9IHRydWU7XG4gICAgYXdhaXQgZ2V0Sm9icygpO1xuICB9XG4gIHVwZGF0ZVN0YXR1cygpO1xuICByZXR1cm4gZGVlcENsb25lKGZpbHRlcmVkSm9icyk7XG59XG5hc3luYyBmdW5jdGlvbiBnZXRKb2JzKGZvcmNlID0gZmFsc2UpIHtcbiAgbG9hZGluZy52YWx1ZSA9IHRydWU7XG4gIGZpbHRlcmVkSm9icy52YWx1ZSA9IGpvYnMudmFsdWUgPSAoYXdhaXQgYXBpLmdldENJQ0RKb2JzKCkpIHx8IFtdO1xuXG4gIGZpbHRlcigpO1xuICB1cGRhdGVTdGF0dXMoKTtcbiAgbG9hZGluZy52YWx1ZSA9IGZhbHNlO1xuICBmb3JjZSA/IHJlZnJlc2goKSA6IHVuZGVmaW5lZDtcbn1cblxuZnVuY3Rpb24gcmVmcmVzaCgpIHtcbiAgZ3JpZC52YWx1ZS5yZWZyZXNoKCk7XG59XG5mdW5jdGlvbiB1cGRhdGVTdGF0dXMoKSB7XG4gIHN0YXR1cy52YWx1ZSA9IGBGaWx0ZXIgW1N0YXR1czogJHtmaWx0ZXJSZXEudmFsdWUuc3RhdHVzID8gdXRpbHMudmFsdWVMYWJlbHMuc3RhdHVzW2ZpbHRlclJlcS52YWx1ZS5zdGF0dXNdIDogJ0FsbCd9XWA7XG59XG5cbmZ1bmN0aW9uIGZpbHRlcigpIHtcbiAgY29uc3QgZmlsdGVyZWRKb2JzID1cbiAgICBkZWVwQ2xvbmUoam9icy52YWx1ZSkuZmlsdGVyKChqb2IpID0+IHtcbiAgICAgIGlmIChmaWx0ZXJSZXEudmFsdWUuc3RhdHVzID09PSAnJykge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBqb2IucnVuU3Rh
182dHVzID09PSBmaWx0ZXJSZXEudmFsdWUuc3RhdHVzO1xuICAgICAgfVxuICAgIH0pIHx8IChbXSBhcyBDSUNESm9iW10pO1xuICBzZXRGaWx0ZXJlZEpvYnMoZmlsdGVyZWRKb2JzIHx8IFtdKTtcblxuICByZWZyZXNoKCk7XG59XG5mdW5jdGlvbiBzZXRGaWx0ZXJlZEpvYnMoam9iczogQ0lDREpvYltdKSB7XG4gIGZpbHRlcmVkSm9icy52YWx1ZSA9IGpvYnM7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGhhbmRsZURlbGV0ZShzZWxzOiBDSUNESm9iW10pIHtcbiAgY29uc3QgbGlzdCA9IHNlbHMubWFwKChyZWMpID0+IGA8bGk+JHtyZWMubmFtZX08L2xpPmApLmpvaW4oJycpO1xuICBjb25zdCBtc2cgPSAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSBmb2xsb3dpbmcgSm9icz8gPGJyLz4nICsgYDx1bD4gJHtsaXN0fSA8L3VsPmA7XG4gIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHV0aWxzLmNvbmZpcm1EZWxldGUoJ0RlbGV0ZSBKb2I/JywgbXNnKTtcblxuICBpZiAocmVzdWx0KSB7XG4gICAgZGVsZXRlSm9iKHNlbHMsICdkZWxldGVkJyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gZGVsZXRlSm9iKHNlbHM6IENJQ0RKb2JbXSwgdmFsOiBzdHJpbmcpIHtcbiAgY29uc3QgcGF5bG9hZCA9IHNlbHMubWFwKChzZWwpID0+ICh7XG4gICAgaWQ6IHNlbC5pZCxcbiAgfSkpO1xuICBwcm9jZXNzaW5nLnZhbHVlID0gdHJ1ZTtcbiAgcHJvY2Vzc0Zvcm0oYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IGFwaS5kZWxldGVDSUNESm9icyh7XG4gICAgICByZWNvcmRzOiBwYXlsb2FkLFxuICAgIH0pO1xuICAgIHV0aWxzLm5vdGlmeVN1Y2Nlc3MoJ0pvYnMgaGF2ZSBiZWVuIGRlbGV0ZWQnKTtcbiAgICBhd2FpdCBnZXRKb2JzKHRydWUpO1xuICB9KTtcbn1cbjwvc2NyaXB0PlxuIl0sIm5hbWVzIjpbImhhc1JvbGUiLCJ1dGlscy5oYXNSb2xlIiwiYWNjZXNzIiwiYXBpLmdldENJQ0RKb2JzIiwidXRpbHMudmFsdWVMYWJlbHMiLCJmaWx0ZXJlZEpvYnMiLCJqb2JzIiwidXRpbHMuY29uZmlybURlbGV0ZSIsImFwaS5kZWxldGVDSUNESm9icyIsInV0aWxzLm5vdGlmeVN1Y2Nlc3MiLCJfY3JlYXRlQmxvY2siLCJfd2l0aEN0eCIsIl9jcmVhdGVWTm9kZSJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQWtEQSxVQUFNLFFBQVE7QUFFZCxVQUFNLEVBQUMsU0FBUyxZQUFZLFNBQVMsYUFBYSxZQUFBLElBQWUsU0FBQTtBQUVqRSxVQUFNLFVBQVU7QUFBQSxNQUNkLEVBQUMsT0FBTyxPQUFBO0FBQUEsTUFDUixFQUFDLE9BQU8sU0FBQTtBQUFBLE1BQ1IsRUFBQyxPQUFPLGNBQWMsT0FBTyxxQkFBcUIsTUFBTSxXQUFBO0FBQUEsTUFDeEQsRUFBQyxPQUFPLFlBQVksT0FBTyxtQkFBbUIsTUFBTSxXQUFBO0FBQUEsSUFBVTtBQUVoRSxVQUFNLFVBQVU7QUFDaEIsVUFBTSxlQUFlLElBQUksS0FBSztBQUM5QixVQUFNLGlCQUFpQixJQUFJLElBQUk7QUFDL0IsVUFBTSxZQUFZLElBQUksRUFBQyxRQUFRLElBQUc7QUFDbEMsVUFBTSxlQUFlLElBQUksRUFBZTtBQUN4QyxVQUFNLE9BQU8sSUFBSSxLQUFLO0FBQ3RCLFVBQU0sU0FBUyxJQUFJLEVBQUU7QUFDckIsVUFBTSxPQUFPLElBQUksRUFBZTtBQUNoQyxVQUFNLFVBQVUsSUFBSSxLQUFLO0FBQ3pCLFVBQU0sT0FBTyxJQUFBO0FBQ2IsYUFBU0EsWUFBVTtBQUNqQixhQUFPLFNBQVMsTUFBTUMsUUFBYyxDQUFDQyxtQkFBTyxlQUFlQSxZQUFBQSxPQUFPLG1CQUFtQkEsWUFBQUEsT0FBTyxZQUFZLENBQUMsQ0FBQztBQUFBLElBQzVHO0FBRUE7QUFBQSxNQUNFLE1BQU0sVUFBVSxNQUFNO0FBQUEsTUFDdEIsTUFBTTtBQUNKL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
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.