PageSourceSearch

https://survivalbrasil.org/assets/exifr--dist--mini.esm.mjs-80c2ef46.js

js survivalbrasil.org collected 2026-09-25 18:52:49 UTC 29,097 bytes, 4 lines download raw bytes

vendor: 2,200 bytes, lines 1-3
1// exifr/dist/[email protected] downloaded from https://ga.jspm.io/npm:[email protected]/dist/mini.esm.mjs
2
3function e(t,s,i){return s in t?Object.defineProperty(t,s,{value:i,enumerable:!0,configurable:!0,writable:!0}):t[s]=i,t}var t="undefined"!=typeof self?self:global;const s="undefined"!=typeof navigator,i=s&&"undefined"==typeof HTMLImageElement,n=!("undefined"==typeof global||"undefined"==typeof process||!process.versions||!process.versions.node),r=t.Buffer,a=!!r,h=t=>void 0!==t;function f(t){return void 0===t||(t instanceof Map?0===t.size:0===Object.values(t).filter(h).length)}function l(t){let s=new Error(t);throw delete s.stack,s}function o(t){let s=function(t){let s=0;return t.ifd0.enabled&&(s+=1024),t.exif.enabled&&(s+=2048),t.makerNote&&(s+=2048),t.userComment&&(s+=1024),t.gps.enabled&&(s+=512),t.interop.enabled&&(s+=100),t.ifd1.enabled&&(s+=1024),s+2048}(t);return t.jfif.enabled&&(s+=50),t.xmp.enabled&&(s+=2e4),t.iptc.enabled&&(s+=14e3),t.icc.enabled&&(s+=6e3),s}const u=t=>String.fromCharCode.apply(null,t),d="undefined"!=typeof TextDecoder?new TextDecoder("utf-8"):void 0;class c{static from(t,s){return t instanceof this&&t.le===s?t:new c(t,void 0,void 0,s)}constructor(t,s=0,i,n){if("boolean"==typeof n&&(this.le=n),Array.isArray(t)&&(t=new Uint8Array(t)),0===t)this.byteOffset=0,this.byteLength=0;else if(t instanceof ArrayBuffer){void 0===i&&(i=t.byteLength-s);let n=new DataView(t,s,i);this._swapDataView(n)}else if(t instanceof Uint8Array||t instanceof DataView||t instanceof c){void 0===i&&(i=t.byteLength-s),(s+=t.byteOffset)+i>t.byteOffset+t.byteLength&&l("Creating view outside of available memory in ArrayBuffer");let n=new DataView(t.buffer,s,i);this._swapDataView(n)}else if("number"==typeof t){let s=new DataView(new ArrayBuffer(t));this._swapDataView(s)}else l("Invalid input argument for BufferView: "+t)}_swapArrayBuffer(t){this._swapDataView(new DataView(t))}_swapBuffer(t){this._swapDataView(new DataView(t.buffer,t.byteOffset,t.byteLength))}_swapDataView(t){this.dataView=t,this.buffer=t.buffer,this.byteOffset=t.byteOffset,this.byteLength=t.byteLength}_lengthToEnd(t){return this.byteLength-t}set(t,s,i=c){return t instanceof DataView||t instanceof c?t=new 
vendor: 3,850 bytes, line 3
3Uint8Array(t.buffer,t.byteOffset,t.byteLength):t instanceof ArrayBuffer&&(t=new Uint8Array(t)),t instanceof Uint8Array||l("BufferView.set(): Invalid data argument."),this.toUint8().set(t,s),new i(this,s,t.byteLength)}subarray(t,s){return s=s||this._lengthToEnd(t),new c(this,t,s)}toUint8(){return new Uint8Array(this.buffer,this.byteOffset,this.byteLength)}getUint8Array(t,s){return new Uint8Array(this.buffer,this.byteOffset+t,s)}getString(t=0,s=this.byteLength){let i=this.getUint8Array(t,s);return n=i,d?d.decode(n):a?Buffer.from(n).toString("utf8"):decodeURIComponent(escape(u(n)));var n}getLatin1String(t=0,s=this.byteLength){let i=this.getUint8Array(t,s);return u(i)}getUnicodeString(t=0,s=this.byteLength){const i=[];for(let n=0;n<s&&t+n<this.byteLength;n+=2)i.push(this.getUint16(t+n));return u(i)}getInt8(t){return this.dataView.getInt8(t)}getUint8(t){return this.dataView.getUint8(t)}getInt16(t,s=this.le){return this.dataView.getInt16(t,s)}getInt32(t,s=this.le){return this.dataView.getInt32(t,s)}getUint16(t,s=this.le){return this.dataView.getUint16(t,s)}getUint32(t,s=this.le){return this.dataView.getUint32(t,s)}getFloat32(t,s=this.le){return this.dataView.getFloat32(t,s)}getFloat64(t,s=this.le){return this.dataView.getFloat64(t,s)}getFloat(t,s=this.le){return this.dataView.getFloat32(t,s)}getDouble(t,s=this.le){return this.dataView.getFloat64(t,s)}getUintBytes(t,s,i){switch(s){case 1:return this.getUint8(t,i);case 2:return this.getUint16(t,i);case 4:return this.getUint32(t,i);case 8:return this.getUint64&&this.getUint64(t,i)}}getUint(t,s,i){switch(s){case 8:return this.getUint8(t,i);case 16:return this.getUint16(t,i);case 32:return this.getUint32(t,i);case 64:return this.getUint64&&this.getUint64(t,i)}}toString(t){return this.dataView.toString(t,this.constructor.name)}ensureChunk(){}}function p(t,s){l(`${t} '${s}' was not loaded, try using full build of exifr.`)}class g extends Map{constructor(t){super(),this.kind=t}get(t,s){return this.has(t)||p(this.kind,t),s&&(t in s||function(t,s){l(`Unknown ${t} '${s}'.`)}(this.kind,t),s[t].enabled||p(this.kind,t)),super.get(t)}keyList(){return Array.from(this.keys())}}var m=new g("file parser"),y=new g("segment parser"),b=new g("file reader");let w=t.fetch;function k(t,i){return(r=t).startsWith("data:")||r.length>1e4?v(t,i,"base64"):n&&t.includes("://")?O(t,i,"url",S):n?v(t,i,"fs"):s?O(t,i,"url",S):void l("Invalid input argument");var r}async function O(t,s,i,n){return b.has(i)?v(t,s,i):n?async function(t,s){let i=await s(t);return new c(i)}(t,n):void l(`Parser ${i} is not loaded`)}async function v(t,s,i){let n=new(b.get(i))(t,s);return await n.read(),n}const S=t=>w(t).then((t=>t.arrayBuffer())),A=t=>new Promise(((s,i)=>{let n=new FileReader;n.onloadend=()=>s(n.result||new ArrayBuffer),n.onerror=i,n.readAsArrayBuffer(t)}));class U extends Map{get tagKeys(){return this.allKeys||(this.allKeys=Array.from(this.keys())),this.allKeys}get tagValues(){return this.allValues||(this.allValues=Array.from(this.values())),this.allValues}}function x(t,s,i){let n=new U;for(let[t,s]of i)n.set(t,s);if(Array.isArray(s))for(let i of s)t.set(i,n);else t.set(s,n);return n}function C(t,s,i){let n,r=t.get(s);for(n of i)r.set(n[0],n[1])}const B=new Map,V=new Map,I=new Map,L=["chunked","firstChunkSize","firstChunkSizeNode","firstChunkSizeBrowser","chunkSize","chunkLimit"],P=["jfif","xmp","icc","iptc","ihdr"],T=["tiff",...P],z=["ifd0","ifd1","exif","gps","interop"],F=[...T,...z],j=["makerNote","userComment"],E=["translateKeys","translateValues","reviveValues","multiSegment"],M=[...E,"sanitize","mergeOutput","silentErrors"];class _{get translate(){return this.translateKeys||this.translateValues||this.reviveValues}}class D extends _{get needed(){return this.enabled||this.deps.size>0}constructor(t,s,i,n){if(super(),e(this,"enabled",!1),e(this,"skip",new Set),e(this,"pick",
vendor: 5,598 bytes, line 3
3new Set),e(this,"deps",new Set),e(this,"translateKeys",!1),e(this,"translateValues",!1),e(this,"reviveValues",!1),this.key=t,this.enabled=s,this.parse=this.enabled,this.applyInheritables(n),this.canBeFiltered=z.includes(t),this.canBeFiltered&&(this.dict=B.get(t)),void 0!==i)if(Array.isArray(i))this.parse=this.enabled=!0,this.canBeFiltered&&i.length>0&&this.translateTagSet(i,this.pick);else if("object"==typeof i){if(this.enabled=!0,this.parse=!1!==i.parse,this.canBeFiltered){let{pick:t,skip:s}=i;t&&t.length>0&&this.translateTagSet(t,this.pick),s&&s.length>0&&this.translateTagSet(s,this.skip)}this.applyInheritables(i)}else!0===i||!1===i?this.parse=this.enabled=i:l(`Invalid options argument: ${i}`)}applyInheritables(t){let s,i;for(s of E)i=t[s],void 0!==i&&(this[s]=i)}translateTagSet(t,s){if(this.dict){let i,n,{tagKeys:r,tagValues:a}=this.dict;for(i of t)"string"==typeof i?(n=a.indexOf(i),-1===n&&(n=r.indexOf(Number(i))),-1!==n&&s.add(Number(r[n]))):s.add(i)}else for(let i of t)s.add(i)}finalizeFilters(){!this.enabled&&this.deps.size>0?(this.enabled=!0,X(this.pick,this.deps)):this.enabled&&this.pick.size>0&&X(this.pick,this.deps)}}var N={jfif:!1,tiff:!0,xmp:!1,icc:!1,iptc:!1,ifd0:!0,ifd1:!1,exif:!0,gps:!0,interop:!1,ihdr:void 0,makerNote:!1,userComment:!1,multiSegment:!1,skip:[],pick:[],translateKeys:!0,translateValues:!0,reviveValues:!0,sanitize:!0,mergeOutput:!0,silentErrors:!0,chunked:!0,firstChunkSize:void 0,firstChunkSizeNode:512,firstChunkSizeBrowser:65536,chunkSize:65536,chunkLimit:5},$=new Map;class R extends _{static useCached(t){let s=$.get(t);return void 0!==s||(s=new this(t),$.set(t,s)),s}constructor(t){super(),!0===t?this.setupFromTrue():void 0===t?this.setupFromUndefined():Array.isArray(t)?this.setupFromArray(t):"object"==typeof t?this.setupFromObject(t):l(`Invalid options argument ${t}`),void 0===this.firstChunkSize&&(this.firstChunkSize=s?this.firstChunkSizeBrowser:this.firstChunkSizeNode),this.mergeOutput&&(this.ifd1.enabled=!1),this.filterNestedSegmentTags(),this.traverseTiffDependencyTree(),this.checkLoadedPlugins()}setupFromUndefined(){let t;for(t of L)this[t]=N[t];for(t of M)this[t]=N[t];for(t of j)this[t]=N[t];for(t of F)this[t]=new D(t,N[t],void 0,this)}setupFromTrue(){let t;for(t of L)this[t]=N[t];for(t of M)this[t]=N[t];for(t of j)this[t]=!0;for(t of F)this[t]=new D(t,!0,void 0,this)}setupFromArray(t){let s;for(s of L)this[s]=N[s];for(s of M)this[s]=N[s];for(s of j)this[s]=N[s];for(s of F)this[s]=new D(s,!1,void 0,this);this.setupGlobalFilters(t,void 0,z)}setupFromObject(t){let s;for(s of(z.ifd0=z.ifd0||z.image,z.ifd1=z.ifd1||z.thumbnail,Object.assign(this,t),L))this[s]=W(t[s],N[s]);for(s of M)this[s]=W(t[s],N[s]);for(s of j)this[s]=W(t[s],N[s]);for(s of T)this[s]=new D(s,N[s],t[s],this);for(s of z)this[s]=new D(s,N[s],t[s],this.tiff);this.setupGlobalFilters(t.pick,t.skip,z,F),!0===t.tiff?this.batchEnableWithBool(z,!0):!1===t.tiff?this.batchEnableWithUserValue(z,t):Array.isArray(t.tiff)?this.setupGlobalFilters(t.tiff,void 0,z):"object"==typeof t.tiff&&this.setupGlobalFilters(t.tiff.pick,t.tiff.skip,z)}batchEnableWithBool(t,s){for(let i of t)this[i].enabled=s}batchEnableWithUserValue(t,s){for(let i of t){let t=s[i];this[i].enabled=!1!==t&&void 0!==t}}setupGlobalFilters(t,s,i,n=i){if(t&&t.length){for(let t of n)this[t].enabled=!1;let s=K(t,i);for(let[t,i]of s)X(this[t].pick,i),this[t].enabled=!0}else if(s&&s.length){let t=K(s,i);for(let[s,i]of t)X(this[s].skip,i)}}filterNestedSegmentTags(){let{ifd0:t,exif:s,xmp:i,iptc:n,icc:r}=this;this.makerNote?s.deps.add(37500):s.skip.add(37500),this.userComment?s.deps.add(37510):s.skip.add(37510),i.enabled||t.skip.add(700),n.enabled||t.skip.add(33723),r.enabled||t.skip.add(34675)}traverseTiffDependencyTree(){let{ifd0:t,exif:s,gps:i,interop:n}=this;n.needed&&(s.deps.add(40965),t.deps.add(40965)),s.needed&&t.deps.add(34665),i.needed&&t.deps.add(34853),this.tiff.enabled=z.some((t=>!0===this[t].enabled))||this.makerNote||this.userComment;for(let t of z)this[t].finalizeFilters()}get onlyTiff(){return!P.map((t=>this[t].enabled)).some((t=>!0===t))&&this.tiff.enabled}checkLoadedPlugins(){for(let t of T)this[t].enabled&&!y.has(t)&&p("segment parser",t)}}function K(t,s){let i,n,r,a,d=[];for(r of s){for(a of(i=B.get(r),n=[],i))(t.includes(a[0])||t.includes(a[1]))&&n.push(a[0]);n.length&&d.push([r,n])}return d}function W(t,s){return void 0!==t?t:void 0!==s?s:void 0}function X(t,s){for(let i of s)t.add(i)}e(R,"default",N);class H{constructor(t){e(this,"parsers",{}),e(this,"output",{}),e(this,"errors",[]),e(this,"pushToErrors",(t=>this.errors.push(t))),this.options=R.useCached(t)}async read(t){this.file=await function(t,n){return"string"==typeof t?k(t,n):s&&!i&&t instanceof HTMLImageElement?k(t.src,n):t instanceof Uint8Array||t instanceof ArrayBuffer||t instanceof DataView?new c(t):s&&t instanceof Blob?O(t,n,"blob",A):void l("Invalid input argument")}(t,this.options)}setup(){if(this.fileParser)return;let{file:t}=this,s=t.getUint16(0);for(let[i,n]of m)if(n.canHandle(t,s))return this.fileParser=new n(this.options,this.file,this.parsers),t[i]=!0;this.file.close&&this.file.close(),l("Unknown file format")}async parse(){let{output:t,errors:s}=this;return this.setup(),this.options.silentErrors?(await this.executeParsers().catch(this.pushToErrors),s.push(...this.fileParser.errors)):await this.executeParsers(),this.file.close&&this.file.close(),this.options.silentErrors&&s.length>0&&(t.errors=s),f(i=t)?void 0:i;var i}async executeParsers(){let{output:t}=this;await this.fileParser.parse();let s=Object.values(this.parsers).map((async s=>{let i=await s.parse();
vendor: 11,735 bytes, line 3
3s.assignToOutput(t,i)}));this.options.silentErrors&&(s=s.map((t=>t.catch(this.pushToErrors)))),await Promise.all(s)}async extractThumbnail(){this.setup();let{options:t,file:s}=this,i=y.get("tiff",t);var n;if(s.tiff?n={start:0,type:"tiff"}:s.jpeg&&(n=await this.fileParser.getOrFindSegment("tiff")),void 0===n)return;let r=await this.fileParser.ensureSegmentChunk(n),a=this.parsers.tiff=new i(r,t,s),d=await a.extractThumbnail();return s.close&&s.close(),d}}async function Y(t,s){let i=new H(s);return await i.read(t),i.parse()}var G=Object.freeze({__proto__:null,parse:Y,Exifr:H,fileParsers:m,segmentParsers:y,fileReaders:b,tagKeys:B,tagValues:V,tagRevivers:I,createDictionary:x,extendDictionary:C,fetchUrlAsArrayBuffer:S,readBlobAsArrayBuffer:A,chunkedProps:L,otherSegments:P,segments:T,tiffBlocks:z,segmentsAndBlocks:F,tiffExtractables:j,inheritables:E,allFormatters:M,Options:R});class J{static findPosition(t,s){let i=t.getUint16(s+2)+2,n="function"==typeof this.headerLength?this.headerLength(t,s,i):this.headerLength,r=s+n,a=i-n;return{offset:s,length:i,headerLength:n,start:r,size:a,end:r+a}}static parse(t,s={}){return new this(t,new R({[this.type]:s}),t).parse()}normalizeInput(t){return t instanceof c?t:new c(t)}constructor(t,s={},i){e(this,"errors",[]),e(this,"raw",new Map),e(this,"handleError",(t=>{if(!this.options.silentErrors)throw t;this.errors.push(t.message)})),this.chunk=this.normalizeInput(t),this.file=i,this.type=this.constructor.type,this.globalOptions=this.options=s,this.localOptions=s[this.type],this.canTranslate=this.localOptions&&this.localOptions.translate}translate(){this.canTranslate&&(this.translated=this.translateBlock(this.raw,this.type))}get output(){return this.translated?this.translated:this.raw?Object.fromEntries(this.raw):void 0}translateBlock(t,s){let i=I.get(s),n=V.get(s),r=B.get(s),a=this.options[s],d=a.reviveValues&&!!i,m=a.translateValues&&!!n,y=a.translateKeys&&!!r,b={};for(let[s,a]of t)d&&i.has(s)?a=i.get(s)(a):m&&n.has(s)&&(a=this.translateValue(a,n.get(s))),y&&r.has(s)&&(s=r.get(s)||s),b[s]=a;return b}translateValue(t,s){return s[t]||s.DEFAULT||t}assignToOutput(t,s){this.assignObjectToOutput(t,this.constructor.type,s)}assignObjectToOutput(t,s,i){if(this.globalOptions.mergeOutput)return Object.assign(t,i);t[s]?Object.assign(t[s],i):t[s]=i}}e(J,"headerLength",4),e(J,"type",void 0),e(J,"multiSegment",!1),e(J,"canHandle",(()=>!1));function q(t){return 192===t||194===t||196===t||219===t||221===t||218===t||254===t}function Q(t){return t>=224&&t<=239}function Z(t,s,i){for(let[n,r]of y)if(r.canHandle(t,s,i))return n}class ee extends class{constructor(t,s,i){e(this,"errors",[]),e(this,"ensureSegmentChunk",(async t=>{let s=t.start,i=t.size||65536;if(this.file.chunked)if(this.file.available(s,i))t.chunk=this.file.subarray(s,i);else try{t.chunk=await this.file.readChunk(s,i)}catch(s){l(`Couldn't read segment: ${JSON.stringify(t)}. ${s.message}`)}else this.file.byteLength>s+i?t.chunk=this.file.subarray(s,i):void 0===t.size?t.chunk=this.file.subarray(s):l("Segment unreachable: "+JSON.stringify(t));return t.chunk})),this.extendOptions&&this.extendOptions(t),this.options=t,this.file=s,this.parsers=i}injectSegment(t,s){this.options[t].enabled&&this.createParser(t,s)}createParser(t,s){let i=new(y.get(t))(s,this.options,this.file);return this.parsers[t]=i}createParsers(t){for(let s of t){let{type:t,chunk:i}=s,n=this.options[t];if(n&&n.enabled){let s=this.parsers[t];s&&s.append||s||this.createParser(t,i)}}}async readSegments(t){let s=t.map(this.ensureSegmentChunk);await Promise.all(s)}}{constructor(...t){super(...t),e(this,"appSegments",[]),e(this,"jpegSegments",[]),e(this,"unknownSegments",[])}static canHandle(t,s){return 65496===s}async parse(){await this.findAppSegments(),await this.readSegments(this.appSegments),this.mergeMultiSegments(),this.createParsers(this.mergedAppSegments||this.appSegments)}setupSegmentFinderArgs(t){!0===t?(this.findAll=!0,this.wanted=new Set(y.keyList())):(t=void 0===t?y.keyList().filter((t=>this.options[t].enabled)):t.filter((t=>this.options[t].enabled&&y.has(t))),this.findAll=!1,this.remaining=new Set(t),this.wanted=new Set(t)),this.unfinishedMultiSegment=!1}async findAppSegments(t=0,s){this.setupSegmentFinderArgs(s);let{file:i,findAll:n,wanted:r,remaining:a}=this;if(!n&&this.file.chunked&&(n=Array.from(r).some((t=>{let s=y.get(t),i=this.options[t];return s.multiSegment&&i.multiSegment})),n&&await this.file.readWhole()),t=this.findAppSegmentsInRange(t,i.byteLength),!this.options.onlyTiff&&i.chunked){let s=!1;for(;a.size>0&&!s&&(i.canReadNextChunk||this.unfinishedMultiSegment);){let{nextChunkOffset:n}=i,r=this.appSegments.some((t=>!this.file.available(t.offset||t.start,t.length||t.size)));if(s=t>n&&!r?!await i.readNextChunk(t):!await i.readNextChunk(n),void 0===(t=this.findAppSegmentsInRange(t,i.byteLength)))return}}}findAppSegmentsInRange(t,s){s-=2;let i,n,r,a,d,m,{file:b,findAll:w,wanted:B,remaining:V,options:I}=this;for(;t<s;t++)if(255===b.getUint8(t))if(i=b.getUint8(t+1),Q(i)){if(n=b.getUint16(t+2),r=Z(b,t,n),r&&B.has(r)&&(a=y.get(r),d=a.findPosition(b,t),m=I[r],d.type=r,this.appSegments.push(d),!w&&(a.multiSegment&&m.multiSegment?(this.unfinishedMultiSegment=d.chunkNumber<d.chunkCount,this.unfinishedMultiSegment||V.delete(r)):V.delete(r),0===V.size)))break;I.recordUnknownSegments&&(d=J.findPosition(b,t),d.marker=i,this.unknownSegments.push(d)),t+=n+1}else if(q(i)){if(n=b.getUint16(t+2),218===i&&!1!==I.stopAfterSos)return;I.recordJpegSegments&&this.jpegSegments.push({offset:t,length:n,marker:i}),t+=n+1}return t}mergeMultiSegments(){if(!this.appSegments.some((t=>t.multiSegment)))return;let t=function(t,s){let i,n,r,a=new Map;for(let d=0;d<t.length;d++)i=t[d],n=i[s],a.has(n)?r=a.get(n):a.set(n,r=[]),r.push(i);return Array.from(a)}(this.appSegments,"type");this.mergedAppSegments=t.map((([t,s])=>{let i=y.get(t,this.options);return i.handleMultiSegments?{type:t,chunk:i.handleMultiSegments(s)}:s[0]}))}getSegment(t){return this.appSegments.find((s=>s.type===t))}async getOrFindSegment(t){let s=this.getSegment(t);return void 0===s&&(await this.findAppSegments(0,[t]),s=this.getSegment(t)),s}}e(ee,"type","jpeg"),m.set("jpeg",ee);const te=[void 0,1,1,2,4,8,1,1,2,4,8,4,8,4];class se extends J{parseHeader(){var t=this.chunk.getUint16();18761===t?this.le=!0:19789===t&&(this.le=!1),this.chunk.le=this.le,this.headerParsed=!0}parseTags(t,s,i=new Map){let{pick:n,skip:r}=this.options[s];n=new Set(n);let a=n.size>0,d=0===r.size,m=this.chunk.getUint16(t);t+=2;for(let y=0;y<m;y++){let m=this.chunk.getUint16(t);if(a){if(n.has(m)&&(i.set(m,this.parseTag(t,m,s)),n.delete(m),0===n.size))break}else!d&&r.has(m)||i.set(m,this.parseTag(t,m,s));t+=12}return i}parseTag(t,s,i){let{chunk:n}=this,r=n.getUint16(t+2),a=n.getUint32(t+4),d=te[r];if(d*a<=4?t+=8:t=n.getUint32(t+8),(r<1||r>13)&&l(`Invalid TIFF value type. block: ${i.toUpperCase()}, tag: ${s.toString(16)}, type: ${r}, offset ${t}`),t>n.byteLength&&l(`Invalid TIFF value offset. block: ${i.toUpperCase()}, tag: ${s.toString(16)}, type: ${r}, offset ${t} is outside of chunk size ${n.byteLength}`),1===r)return n.getUint8Array(t,a);if(2===r)return""===(m=function(t){for(;t.endsWith("\0");)t=t.slice(0,-1);return t}(m=n.getString(t,a)).trim())?void 0:m;var m;if(7===r)return n.getUint8Array(t,a);if(1===a)return this.parseTagValue(r,t);{let s=new(function(t){switch(t){case 1:return Uint8Array;case 3:return Uint16Array;case 4:return Uint32Array;case 5:return Array;case 6:return Int8Array;case 8:return Int16Array;case 9:return Int32Array;case 10:return Array;case 11:return Float32Array;case 12:return Float64Array;default:return Array}}(r))(a),i=d;for(let n=0;n<a;n++)s[n]=this.parseTagValue(r,t),t+=i;return s}}parseTagValue(t,s){let{chunk:i}=this;switch(t){case 1:return i.getUint8(s);case 3:return i.getUint16(s);case 4:return i.getUint32(s);case 5:return i.getUint32(s)/i.getUint32(s+4);case 6:return i.getInt8(s);case 8:return i.getInt16(s);case 9:return i.getInt32(s);case 10:return i.getInt32(s)/i.getInt32(s+4);case 11:return i.getFloat(s);case 12:return i.getDouble(s);case 13:return i.getUint32(s);default:l(`Invalid tiff type ${t}`)}}}class ie extends se{static canHandle(t,s){return 225===t.getUint8(s+1)&&1165519206===t.getUint32(s+4)&&0===t.getUint16(s+8)}async parse(){this.parseHeader();let{options:t}=this;return t.ifd0.enabled&&await this.parseIfd0Block(),t.exif.enabled&&await this.safeParse("parseExifBlock"),t.gps.enabled&&await this.safeParse("parseGpsBlock"),t.interop.enabled&&await this.safeParse("parseInteropBlock"),t.ifd1.enabled&&await this.safeParse("parseThumbnailBlock"),this.createOutput()}safeParse(t){let s=this[t]();return void 0!==s.catch&&(s=s.catch(this.handleError)),s}findIfd0Offset(){void 0===this.ifd0Offset&&(this.ifd0Offset=this.chunk.getUint32(4))}findIfd1Offset(){if(void 0===this.ifd1Offset){this.findIfd0Offset();let t=this.chunk.getUint16(this.ifd0Offset),s=this.ifd0Offset+2+12*t;this.ifd1Offset=this.chunk.getUint32(s)}}parseBlock(t,s){let i=new Map;return this[s]=i,this.parseTags(t,s,i),i}async parseIfd0Block(){if(this.ifd0)return;let{file:t}=this;this.findIfd0Offset(),this.ifd0Offset<8&&l("Malformed EXIF data"),!t.chunked&&this.ifd0Offset>t.byteLength&&l(`IFD0 offset points to outside of file.\nthis.ifd0Offset: ${this.ifd0Offset}, file.byteLength: ${t.byteLength}`),t.tiff&&await t.ensureChunk(this.ifd0Offset,o(this.options));let s=this.parseBlock(this.ifd0Offset,"ifd0");return 0!==s.size?(this.exifOffset=s.get(34665),this.interopOffset=s.get(40965),this.gpsOffset=s.get(34853),this.xmp=s.get(700),this.iptc=s.get(33723),this.icc=s.get(34675),this.options.sanitize&&(s.delete(34665),s.delete(40965),s.delete(34853),s.delete(700),s.delete(33723),s.delete(34675)),s):void 0}async parseExifBlock(){if(this.exif)return;if(this.ifd0||await this.parseIfd0Block(),void 0===this.exifOffset)return;this.file.tiff&&await this.file.ensureChunk(this.exifOffset,o(this.options));let t=this.parseBlock(this.exifOffset,"exif");return this.interopOffset||(this.interopOffset=t.get(40965)),this.makerNote=t.get(37500),this.userComment=t.get(37510),this.options.sanitize&&(t.delete(40965),t.delete(37500),t.delete(37510)),this.unpack(t,41728),this.unpack(t,41729),t}unpack(t,s){let i=t.get(s);i&&1===i.length&&t.set(s,i[0])}async parseGpsBlock(){if(this.gps)return;if(this.ifd0||await this.parseIfd0Block(),void 0===this.gpsOffset)return;let t=this.parseBlock(this.gpsOffset,"gps");return t&&t.has(2)&&t.has(4)&&(t.set("latitude",ne(...t.get(2),t.get(1))),t.set("longitude",ne(...t.get(4),t.get(3)))),t}async parseInteropBlock(){if(!this.interop&&(this.ifd0||await this.parseIfd0Block(),void 0!==this.interopOffset||this.exif||await this.parseExifBlock(),void 0!==this.interopOffset))return this.parseBlock(this.interopOffset,"interop")}async parseThumbnailBlock(t=!1){if(!this.ifd1&&!this.ifd1Parsed&&(!this.options.mergeOutput||t))return this.findIfd1Offset(),this.ifd1Offset>0&&(this.parseBlock(this.ifd1Offset,"ifd1"),this.ifd1Parsed=!0),this.ifd1}async extractThumbnail(){if(this.headerParsed||this.parseHeader(),this.ifd1Parsed||await this.parseThumbnailBlock(!0),void 0===this.ifd1)return;let t=this.ifd1.get(513),s=this.ifd1.get(514);return this.chunk.getUint8Array(t,s)}get image(){return this.ifd0}get thumbnail(){return this.ifd1}createOutput(){let t,s,i,n={};for(s of z)if(t=this[s],!f(t))if(i=this.canTranslate?this.translateBlock(t,s):Object.fromEntries(t),this.options.mergeOutput){if("ifd1"===s)continue;Object.assign(n,i)}else n[s]=i;return this.makerNote&&(n.makerNote=this.makerNote),this.userComment&&(n.userComment=this.userComment),n}assignToOutput(t,s){if(this.globalOptions.mergeOutput)Object.assign(t,s);else for(let[i,n]of Object.entries(s))this.assignObjectToOutput(t,
vendor: 4,998 bytes, line 3
3i,n)}}function ne(t,s,i,n){var r=t+s/60+i/3600;return"S"!==n&&"W"!==n||(r*=-1),r}e(ie,"type","tiff"),e(ie,"headerLength",10),y.set("tiff",ie);var re=Object.freeze({__proto__:null,default:G,Exifr:H,fileParsers:m,segmentParsers:y,fileReaders:b,tagKeys:B,tagValues:V,tagRevivers:I,createDictionary:x,extendDictionary:C,fetchUrlAsArrayBuffer:S,readBlobAsArrayBuffer:A,chunkedProps:L,otherSegments:P,segments:T,tiffBlocks:z,segmentsAndBlocks:F,tiffExtractables:j,inheritables:E,allFormatters:M,Options:R,parse:Y});const ae={ifd0:!1,ifd1:!1,exif:!1,gps:!1,interop:!1,sanitize:!1,reviveValues:!0,translateKeys:!1,translateValues:!1,mergeOutput:!1},he=Object.assign({},ae,{firstChunkSize:4e4,gps:[1,2,3,4]});async function fe(t){let s=new H(he);await s.read(t);let i=await s.parse();if(i&&i.gps){let{latitude:t,longitude:s}=i.gps;return{latitude:t,longitude:s}}}const le=Object.assign({},ae,{tiff:!1,ifd1:!0,mergeOutput:!1});async function oe(t){let s=new H(le);await s.read(t);let i=await s.extractThumbnail();return i&&a?r.from(i):i}async function ue(t){let s=await this.thumbnail(t);if(void 0!==s){let t=new Blob([s]);return URL.createObjectURL(t)}}const de=Object.assign({},ae,{firstChunkSize:4e4,ifd0:[274]});async function ce(t){let s=new H(de);await s.read(t);let i=await s.parse();if(i&&i.ifd0)return i.ifd0[274]}const pe=Object.freeze({1:{dimensionSwapped:!1,scaleX:1,scaleY:1,deg:0,rad:0},2:{dimensionSwapped:!1,scaleX:-1,scaleY:1,deg:0,rad:0},3:{dimensionSwapped:!1,scaleX:1,scaleY:1,deg:180,rad:180*Math.PI/180},4:{dimensionSwapped:!1,scaleX:-1,scaleY:1,deg:180,rad:180*Math.PI/180},5:{dimensionSwapped:!0,scaleX:1,scaleY:-1,deg:90,rad:90*Math.PI/180},6:{dimensionSwapped:!0,scaleX:1,scaleY:1,deg:90,rad:90*Math.PI/180},7:{dimensionSwapped:!0,scaleX:1,scaleY:-1,deg:270,rad:270*Math.PI/180},8:{dimensionSwapped:!0,scaleX:1,scaleY:1,deg:270,rad:270*Math.PI/180}});let ge=!0,me=!0;if("object"==typeof navigator){let t=navigator.userAgent;if(t.includes("iPad")||t.includes("iPhone")){let s=t.match(/OS (\d+)_(\d+)/);if(s){let[,t,i]=s,n=Number(t)+.1*Number(i);ge=n<13.4,me=!1}}else if(t.includes("OS X 10")){let[,s]=t.match(/OS X 10[_.](\d+)/);ge=me=Number(s)<15}if(t.includes("Chrome/")){let[,s]=t.match(/Chrome\/(\d+)/);ge=me=Number(s)<81}else if(t.includes("Firefox/")){let[,s]=t.match(/Firefox\/(\d+)/);ge=me=Number(s)<77}}async function ye(t){let s=await ce(t);return Object.assign({canvas:ge,css:me},pe[s])}class be extends c{constructor(...t){super(...t),e(this,"ranges",new we),0!==this.byteLength&&this.ranges.add(0,this.byteLength)}_tryExtend(t,s,i){if(0===t&&0===this.byteLength&&i){let t=new DataView(i.buffer||i,i.byteOffset,i.byteLength);this._swapDataView(t)}else{let i=t+s;if(i>this.byteLength){let{dataView:t}=this._extend(i);this._swapDataView(t)}}}_extend(t){let s;s=a?r.allocUnsafe(t):new Uint8Array(t);let i=new DataView(s.buffer,s.byteOffset,s.byteLength);return s.set(new Uint8Array(this.buffer,this.byteOffset,this.byteLength),0),{uintView:s,dataView:i}}subarray(t,s,i=!1){return s=s||this._lengthToEnd(t),i&&this._tryExtend(t,s),this.ranges.add(t,s),super.subarray(t,s)}set(t,s,i=!1){i&&this._tryExtend(s,t.byteLength,t);let n=super.set(t,s);return this.ranges.add(s,n.byteLength),n}async ensureChunk(t,s){this.chunked&&(this.ranges.available(t,s)||await this.readChunk(t,s))}available(t,s){return this.ranges.available(t,s)}}class we{constructor(){e(this,"list",[])}get length(){return this.list.length}add(t,s,i=0){let n=t+s,r=this.list.filter((s=>ke(t,s.offset,n)||ke(t,s.end,n)));if(r.length>0){t=Math.min(t,...r.map((t=>t.offset))),n=Math.max(n,...r.map((t=>t.end))),s=n-t;let i=r.shift();i.offset=t,i.length=s,i.end=n,this.list=this.list.filter((t=>!r.includes(t)))}else this.list.push({offset:t,length:s,end:n})}available(t,s){let i=t+s;return this.list.some((s=>s.offset<=t&&i<=s.end))}}function ke(t,s,i){return t<=s&&s<=i}class Oe extends be{constructor(t,s){super(0),e(this,"chunksRead",0),this.input=t,this.options=s}async readWhole(){this.chunked=!1,await this.readChunk(this.nextChunkOffset)}async readChunked(){this.chunked=!0,await this.readChunk(0,this.options.firstChunkSize)}async readNextChunk(t=this.nextChunkOffset){if(this.fullyRead)return this.chunksRead++,!1;let s=this.options.chunkSize,i=await this.readChunk(t,s);return!!i&&i.byteLength===s}async readChunk(t,s){if(this.chunksRead++,0!==(s=this.safeWrapAddress(t,s)))return this._readChunk(t,s)}safeWrapAddress(t,s){return void 0!==this.size&&t+s>this.size?Math.max(0,this.size-t):s}get nextChunkOffset(){if(0!==this.ranges.list.length)return this.ranges.list[0].length}get canReadNextChunk(){return this.chunksRead<this.options.chunkLimit}get fullyRead(){return void 0!==this.size&&this.nextChunkOffset===this.size}read(){return this.options.chunked?this.readChunked():this.readWhole()}close(){}}b.set("blob",class extends Oe{async readWhole(){this.chunked=!1;let t=await A(this.input);this._swapArrayBuffer(t)}readChunked(){return this.chunked=!0,this.size=this.input.size,super.readChunked()}
3async _readChunk(t,s){let i=s?t+s:void 0,n=this.input.slice(t,i),r=await A(n);return this.set(r,t,!0)}});export{H as Exifr,R as Options,M as allFormatters,L as chunkedProps,x as createDictionary,re as default,C as extendDictionary,S as fetchUrlAsArrayBuffer,m as fileParsers,b as fileReaders,fe as gps,he as gpsOnlyOptions,E as inheritables,ce as orientation,de as orientationOnlyOptions,P as otherSegments,Y as parse,A as readBlobAsArrayBuffer,ge as rotateCanvas,me as rotateCss,ye as rotation,pe as rotations,y as segmentParsers,T as segments,F as segmentsAndBlocks,B as tagKeys,I as tagRevivers,V as tagValues,oe as thumbnail,le as thumbnailOnlyOptions,ue as thumbnailUrl,z as tiffBlocks,j as tiffExtractables};
4

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.