-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathpngtoy.min.js
6 lines (6 loc) · 44.2 KB
/
pngtoy.min.js
1
2
3
4
5
6
/*
pngtoy version 0.6.1 ALPHA
(c) 2015-2017 Epistemex.com
License: CC BY-NC-SA 4.0
*/
function PngToy(b){this.doCRC=!0;this.allowInvalid=!1;this.beforeSend=a;Object.assign(this,b);function a(){}this.url=null;this.buffer=null;this.view=null;this.chunks=[];this.debug={}}PngToy.prototype={fetch:function(b){var a=this;a.url=b;a.buffer=a.chunks=a.view=null;a._pos=0;return new Promise(function(f,e){if(typeof b==="string"){try{var g=new XMLHttpRequest();g.open("GET",b,!0);g.responseType="arraybuffer";a.beforeSend(g);g.onerror=function(h){e("Network error. "+h.message)};g.onload=function(){if(g.status===200){c(g.response)}else{e("Loading error:"+g.statusText)}};g.send()}catch(d){e(d.message)}}else{c(ArrayBuffer.isView(b)?b.buffer:b)}function c(h){var k,j;try{k=new DataView(h);if(h.byteLength>66&&k.getUint32(0)===2303741511&&k.getUint32(4)===218765834){j=PngToy._getChunks(h,k,a.doCRC,a.allowInvalid);a.buffer=h;a.view=k;a.chunks=j.chunks||[];if(a.chunks||a.allowInvalid){f()}else{e(j.error)}}else{e("Not a PNG file.")}}catch(i){e(i.message)}}})},getChunk:function(a){var b=["IHDR","IDAT","PLTE","sPLT","tRNS","iTXt","tEXt","zTXt","iCCP","gAMA","cHRM","sRGB","hIST","sBIT","pHYs","bKGD","tIME","oFFs","sTER","sCAL","pCAL","IEND"];if(b.indexOf(a)>-1){return a==="IEND"?!!PngToy._findChunk(this.chunks,"IEND"):PngToy["_"+a](this)}else{return PngToy._findChunk(this.chunks,a)}},toMinimal:function(b){if(this.chunks.length){var a=["IHDR","IDAT","IEND","PLTE","tRNS","gAMA"];var c=[new Uint32Array([1196314761,169478669])];this.chunks.forEach(function(d){if(a.indexOf(d.name)>-1){c.push(d.getRaw(!0))}});return new Blob(c,{type:b?"application/octet-stream":"image/png"})}else{throw"No file loaded (see fetch())."}},getGammaLUT:function(c,b,f){for(var a=new Uint8Array(256),d=1/((c||1)*(b||2.2)*(f||1)),e=0;e<256;e++){a[e]=Math.round(Math.pow(e/255,d)*255)}return a},guessDisplayGamma:function(){return navigator.userAgent.indexOf("Mac OS")>-1?1.8:2.2}};PngToy._blockSize=1<<21;PngToy._delay=7;if(typeof exports!=="undefined"){exports.PngToy=PngToy};PngToy._getChunks=function(b,H,k,a){var z=this,E=8,x=b.byteLength,e=[],d,y,o,C,h,g,D,G,r,B,F,v=!0,A=["iTXT","tIME","tEXt","zTXt"],n=PngToy._findChunk,l="Invalid number of ",m="Invalid chunk order for ";if(k&&!this.table){this.table=new Uint32Array(256);for(var s=0,w;s<256;s++){h=s>>>0;for(w=0;w<8;w++){h=(h&1)?3988292384^(h>>>1):h>>>1}this.table[s]=h}}while(E<x){y=q();o=p();if(y>2147483647&&!a){return{error:"Invalid chunk size."}}C=E;E=C+y;h=q();d=new PngToy.Chunk(o,C,y,h,b);if(k){c(d);if(!d.crcOk&&!a){return{error:"Invalid CRC in chunk "+o}}}if(d.isReserved&&!a){return{error:"Invalid chunk name: "+o}}e.push(d)}if(!a){if(!f("IHDR",1,1)){return{error:l+"IHDR chunks."}}if(!f("tIME",0,1)){return{error:l+"tIME chunks."}}if(!f("zTXt",0,-1)){return{error:l+"zTXt chunks."}}if(!f("tEXt",0,-1)){return{error:l+"tEXt chunks."}}if(!f("iTXt",0,-1)){return{error:l+"iTXt chunks."}}if(!f("pHYs",0,1)){return{error:l+"pHYs chunks."}}if(!f("sPLT",0,-1)){return{error:l+"sPLT chunks."}}if(!f("iCCP",0,1)){return{error:l+"iCCP chunks."}}if(!f("sRGB",0,1)){return{error:l+"sRGB chunks."}}if(!f("sBIT",0,1)){return{error:l+"sBIT chunks."}}if(!f("gAMA",0,1)){return{error:l+"gAMA chunks."}}if(!f("cHRM",0,1)){return{error:l+"cHRM chunks."}}if(!f("PLTE",0,1)){return{error:l+"PLTE chunks."}}if(!f("tRNS",0,1)){return{error:l+"tRNS chunks."}}if(!f("hIST",0,1)){return{error:l+"hIST chunks."}}if(!f("bKGD",0,1)){return{error:l+"bKGD chunks."}}if(!f("IDAT",1,-1)){return{error:l+"IDAT chunks."}}if(!f("IEND",1,1)){return{error:l+"IEND chunks."}}if(e[0].name!=="IHDR"||e[e.length-1].name!=="IEND"){return{error:"Invalid PNG chunk order."}}g=H.getUint8(n(e,"IHDR").offset+9);D=n(e,"PLTE");r=n(e,"hIST");G=n(e,"tRNS");B=n(e,"oFFs");F=n(e,"sTER");if(n(e,"iCCP")&&n(e,"sRGB")){return{error:"Both iCCP and sRGB cannot be present."}}if(g===3&&!D){return{error:"Missing PLTE chunk."}}if((g===0||g===4)&&D){return{error:"PLTE chunk should not appear with this color type."}}if((g===4||g===6)&&G){return{error:"tRNS chunk should not appear with this color type."}}if(r&&!D){return{error:"hIST chunk can only appear if a PLTE chunk is present."}}if(D){if(!t("PLTE","IDAT")){return{error:m+"PLTE."}}if(r&&!u("PLTE","hIST","IDAT")){return{error:m+"hIST."}}if(G&&!u("PLTE","tRNS","IDAT")){return{error:m+"tRNS."}}if(n(e,"bKGD")&&!u("PLTE","bKGD","IDAT")){return{error:m+"bKGD."}}if(!t("cHRM","PLTE")){return{error:m+"cHRM."}}if(!t("gAMA","PLTE")){return{error:m+"gAMA."}}if(!t("iCCP","PLTE")){return{error:m+"iCCP."}}if(!t("sRGB","PLTE")){return{error:m+"sRGB."}}}if(B&&!t("oFFs","IDAT")){return{error:m+"oFFs."}}if(F&&!t("sTER","IDAT")){return{error:m+"sTER."}}for(s=e.length-2;s>0;s--){if(v&&e[s].name!=="IDAT"&&A.indexOf(e[s].name)<0){v=!1}else{if(!v&&e[s].name==="IDAT"){return{error:"Invalid chunk inside IDAT chunk sequence."}}}}}return{chunks:e};function f(i,J,I){var j=PngToy._findChunks(e,i);return I<0?j.length>=J:j.length>=J&&j.length<=I}function u(j,I,i){return t(j,I)&&t(I,i)}function t(j,J){var I=-1,K=-1,L,M=e.length;for(L=0;L<M;L++){if(e[L].name===j){I=L}if(e[L].name===J){K=L}}return(I<K)}function c(j){var I=new Uint8Array(b,j.offset-4,j.length+4);j.crcOk=(j.crc===i(I));function i(J){var K=(-1>>>0),M=J.length,L;for(L=0;L<M;L++){K=(K>>>8)^z.table[(K^J[L])&255]}return(K^-1)>>>0}}function p(){var j=q(),i=String.fromCharCode;return i(j>>>24)+i(j>>16&255)+i(j>>8&255)+i(j&255)}function q(){var j=H.getUint32(E);E+=4;return j>>>0}};PngToy._getChunks.table=null;PngToy._findChunk=function(b,d){for(var c=0,a;a=b[c++];){if(a.name===d){return a}}return null};PngToy._findChunks=function(a,c){var b=[];a.forEach(function(d){if(d.name===c){b.push(d)}});return b};PngToy._getStr=function(j,e,d){var g="",c=e,a=-1,h,k=!1,b=String.fromCharCode,f=" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!\"%&'()*+,-./:;<=>?_";d+=c;for(;c<d&&a;){a=j.getUint8(c++);if(a){h=b(a);if(f.indexOf(h)>-1){g+=h}else{k=!0}continue}break}return{offset:c,text:g,warning:k}};PngToy.Chunk=function(d,e,c,b,a){this.name=d;this.offset=e;this.length=c;this.crc=b;this.crcOk=!0;this.isCritical=!(d.charCodeAt(0)&32);this.isPrivate=!!(d.charCodeAt(1)&32);this.isReserved=!!(d.charCodeAt(2)&32);this.isCopySafe=!!(d.charCodeAt(3)&32);this.buffer=a};PngToy.Chunk.prototype={getRaw:function(a){return a?new Uint8Array(this.buffer,this.offset-8,this.length+12):new Uint8Array(this.buffer,this.offset,this.length)}};PngToy._IHDR=function(d){var g=d.view,c=d.chunks,a=d.allowInvalid,b=PngToy._findChunk(c,"IHDR"),e,f;if(!b){return{error:"Critical - IHDR chunk is missing."}}e=b.offset;f={width:g.getUint32(e),height:g.getUint32(e+4),depth:g.getUint8(e+8),type:g.getUint8(e+9),compression:g.getUint8(e+10),filter:g.getUint8(e+11),interlaced:g.getUint8(e+12)};if(!a){if([0,2,3,4,6].indexOf(f.type)<0){return{error:"Invalid color type."}}switch(f.type){case 0:if([1,2,4,8,16].indexOf(f.depth)<0){return{error:"Invalid color depth."}}break;case 3:if([1,2,4,8].indexOf(f.depth)<0){return{error:"Invalid color depth."}}break;default:if([8,16].indexOf(f.depth)<0){return{error:"Invalid color depth."}}}if(!f.width||!f.height){return{error:"Invalid dimension."}}if(f.compression){return{error:"Invalid compression type."}}if(f.filter){return{error:"Invalid filter type."}}if(f.interlaced<0||f.interlaced>1){return{error:"Invalid interlace mode "+f.interlaced}}}return f};PngToy._IDAT=function(f){var b=f.buffer,d=f.chunks,a=f.allowInvalid,g=0,c,j=!1,h=new ezlib.Inflate(),e=!1;while(c=d[g++]){if(c.name==="IDAT"){e=!0;break}}while(c){j=c.name==="IEND";if(c.name==="IDAT"){h.push(new Uint8Array(b,c.offset,c.length),j)}c=d[g++]}if(!j&&!a){return{error:"Critical - missing IEND chunk."}}return e?(h.err?{error:h.msg}:{buffer:h.result}):(a?{buffer:null}:{error:"Critical - no IDAT chunk(s)."})};PngToy._PLTE=function(e){var b=e.buffer,d=e.chunks,a=e.allowInvalid,c=PngToy._findChunk(d,"PLTE"),f;if(!c){return null}f=new Uint8Array(b,c.offset,c.length);if(!a){if(f.length%3){return{error:"Invalid palette size."}}if(f.length<3||f.length>3*256){return{error:"Invalid number of palette entries."}}}return{palette:f,length:f.length/3}};PngToy._sPLT=function(d){var f=d.view,c=d.chunks,a=d.allowInvalid,b=PngToy._findChunks(c,"sPLT"),e=[];if(!b.length){return null}b.forEach(function(h){var p={depth:null,name:null,palette:[],entries:0},m,o,l,q,g,n=[],k,j;o=h.offset;m=PngToy._getStr(f,o,80);p.name=m.text;o=m.offset;p.depth=f.getUint8(o++);q=p.depth===8?6:10;g=p.depth===8?1:2;l=h.length-(o-h.offset);j=q===6?f.getUint8.bind(f):f.getUint16.bind(f);for(k=0;k<l;k+=q){n.push(j(o+k),j(o+k+g),j(o+k+g*2),j(o+k+g*3),f.getUint16(o+k+g*4))}p.palette=n;p.entries=n.length/q;if(!a){if((p.depth===8&&l%6)||(p.depth===16&&l%10)){return{error:"Invalid sPLT chunk."}}}e.push(p)});return e};PngToy._tRNS=function(e){var b=e.buffer,d=e.chunks,a=e.allowInvalid,c=PngToy._findChunk(d,"tRNS"),g=PngToy._PLTE(e),f=PngToy._IHDR(e),h;if(!c){return null}if(!a){if(f.type===2&&(c.length%6)){return{error:"Invalid tRNS length."}}}switch(f.type){case 0:h={alphas:new Uint16Array(b.slice(c.offset,c.offset+c.length)),length:c.length>>1};break;case 2:h={alphas:new Uint16Array(b.slice(c.offset,c.offset+c.length)),length:c.length/6};break;case 3:h={alphas:new Uint8Array(b,c.offset,c.length),length:c.length};break;default:return a?{alphas:null,length:0}:{error:"tRNS chunk is not valid for this color type."}}if(!a&&g&&h.length>g.length){return{error:"tRNS chunk contains more entries than palette entries."}}return h};PngToy._hIST=function(e){var i=e.view,c=e.chunks,a=e.allowInvalid,b=PngToy._findChunk(c,"hIST"),g=PngToy._PLTE(e),d=[],h,f;if(!b){return null}if(!a&&b.length%2){return{error:"Invalid length of hIST chunk."}}h=b.offset;f=h+b.length;for(;h<f;h+=2){d.push(i.getUint16(h))}if(!a){if(d.length!==g.length){return{error:"hIST chunk must have same number of entries as PLTE chunk."}}}return{histogram:d}};PngToy._iTXt=function(e){var l=e.view,d=e.chunks,b=e.allowInvalid,c=PngToy._findChunks(d,"iTXt"),j,k,h,f,m=!1,a=!1,g=[];if(!c.length){return null}c.forEach(function(i){if(a){return}var o={};j=i.offset;h=PngToy._getStr(l,j,80);o.keyword=h.text;j=h.offset;if(h.warn){m=!0}o.hasCompression=l.getUint8(j);o.compression=l.getUint8(j+1);j+=2;h=PngToy._getStr(l,j,20);o.language=h.text.toLowerCase();j=h.offset;if(h.warn){m=!0}h=PngToy._getStr(l,j,80);o.keywordLang=h.text;j=h.offset;if(h.warn){m=!0}k=new Uint8Array(l.buffer,j,i.length-(j-i.offset));if(o.hasCompression===1){if(!b&&!o.compression){o={error:"Invalid compression type for iTXt."}}else{try{o.text=ezlib.inflate(k,{to:"string"})}catch(n){if(b){o.text=""}else{o={error:n}}}}}else{if(!o.hasCompression){h="";for(f=0;f<k.length;f++){h+=String.fromCharCode(k[f])}o.text=h}else{if(b){o.text=""}else{o={error:"Invalid compression flag."}}}}if(!b&&m){a=!0;return{error:"One or more field contains illegal chars."}}g.push(o)});return g};PngToy._tEXt=function(e){var l=e.view,d=e.chunks,b=e.allowInvalid,c=PngToy._findChunks(d,"tEXt"),m=!1,a=!1,j,k,h,f,g=[];if(!c.length){return null}c.forEach(function(i){if(a){return}var n={};j=i.offset;h=PngToy._getStr(l,j,80);n.keyword=h.text;j=h.offset;if(h.warn){m=!0}k=new Uint8Array(l.buffer,j,i.length-(j-i.offset));h="";for(f=0;f<k.length;f++){h+=String.fromCharCode(k[f])}n.text=h;g.push(n);if(!b&&m){a=!0;return{error:"One or more field contains illegal chars."}}});return g};PngToy._zTXt=function(e){var i=e.view,d=e.chunks,b=e.allowInvalid,c=PngToy._findChunks(d,"zTXt"),j=!1,a=!1,f=[],h,g;if(!c.length){return null}c.forEach(function(k){if(a){return}var m={};h=k.offset;g=PngToy._getStr(i,h,80);m.keyword=g.text;h=g.offset;if(g.warn){j=!0}if(i.getUint8(h++)&&!b){m={error:"Invalid compression type."}}else{try{m.text=ezlib.inflate(new Uint8Array(i.buffer,h,k.length-(h-k.offset)),{to:"string"})}catch(l){if(b){m.text=""}else{m={error:l}}}}if(!b&&j){a=!0;return{error:"One or more field contains illegal chars."}}f.push(m)});return f};PngToy._iCCP=function(){var l=host.view,d=host.chunks,a=host.allowInvalid,c=PngToy._findChunk(d,"iCCP"),j,h,g,f,b,k={name:null,icc:null};if(!c){return null}j=c.offset;h=PngToy._getStr(l,j,80);g=h.text;j=h.offset;if(!a){for(f=0;f<g.length;f++){b=g.charCodeAt(f);if(!(b>31&&b<127)&&!(b>160&&b<256)){return{error:"ICC profile contains illegal chars in name."}}}}k.name=g;if(l.getUint8(j++)&&!a){return{error:"Invalid compression type."}}try{k.icc=ezlib.inflate(new Uint8Array(l.buffer,j,c.length-(j-c.offset)))}catch(e){if(!a){return{error:e}}}return k};PngToy._gAMA=function(e){var f=e.view,c=e.chunks,a=e.allowInvalid,b=PngToy._findChunk(c,"gAMA"),d;if(!b){return null}d=f.getUint32(b.offset)/100000;if(!a){}return{gamma:d}};PngToy._cHRM=function(d){var g=d.view,c=d.chunks,a=d.allowInvalid,b=PngToy._findChunk(c,"cHRM"),f,e;if(!b){return null}e=b.offset;f={whiteX:g.getUint32(e)/100000,whiteY:g.getUint32(e+4)/100000,redX:g.getUint32(e+8)/100000,redY:g.getUint32(e+12)/100000,greenX:g.getUint32(e+16)/100000,greenY:g.getUint32(e+20)/100000,blueX:g.getUint32(e+24)/100000,blueY:g.getUint32(e+28)/100000};if(!a){}return f};PngToy._sRGB=function(d){var g=d.view,c=d.chunks,a=d.allowInvalid,b=PngToy._findChunk(c,"sRGB"),e,f=["Perceptual","Relative colorimetric","Saturation","Absolute colorimetric"];if(!b){return null}e=g.getUint8(b.offset);if(!a){if(e<0||e>3){return{error:"Invalid range for sRGB render intent."}}}return{intent:e,desc:f[e]||null}};PngToy._pHYs=function(d){var g=d.view,c=d.chunks,a=d.allowInvalid,b=PngToy._findChunk(c,"pHYs"),e,f={};if(!b){return null}e=b.offset;f.ppuX=g.getUint32(e);f.ppuY=g.getUint32(e+4);f.unit=g.getUint8(e+8);if(f.unit===1){f.desc="Meters"}else{f.desc="ratio"}if(!a){if(f.ppuX>2147483647||f.ppuY>2147483647){return{error:"Invalid unit lengths."}}if(f.unit<0||f.unit>1){return{error:"Invalid unit for pHYs chunk."}}}else{f.ppuX&=2147483647;f.ppuY&=2147483647;f.unit&=1}return f};PngToy._bKGD=function(c){var e=c.view,b=c.chunks,a=PngToy._findChunk(b,"bKGD"),d=PngToy._IHDR(c);if(!a){return null}switch(d.type){case 0:case 4:return{background:[e.getUint16(a.offset)]};case 2:case 6:return{background:new Uint16Array(e.buffer,a.offset,6)};default:return{index:e.getUint8(a.offset)}}};PngToy._tIME=function(e){var h=e.view,c=e.chunks,a=e.allowInvalid,b=PngToy._findChunk(c,"tIME"),f,g;if(!b){return null}f=b.offset;g={year:h.getUint16(f),month:h.getUint8(f+2),day:h.getUint8(f+3),hour:h.getUint8(f+4),minute:h.getUint8(f+5),second:h.getUint8(f+6),date:null};if(!a){if(g.year<0||g.year>65535||g.month<1||g.month>12||g.day<1||g.day>31||g.hour<0||g.hour>23||g.minute<0||g.minute>59||g.second<0||g.second>60){return{error:"Invalid timestamp."}}}try{g.date=new Date(g.year,g.month-1,g.day,g.hour,g.minute,Math.min(59,g.second))}catch(d){if(!a){return{error:d}}}return g};PngToy._oFFs=function(d){var g=d.view,c=d.chunks,a=d.allowInvalid,b=PngToy._findChunk(c,"oFFs"),e,f={};if(!b){return null}e=b.offset;f.x=g.getInt32(e);f.y=g.getInt32(e+4);f.unit=g.getUint8(e+8);f.desc=["Pixels","Micrometers"][f.unit]||"Invalid";if(!a){if(f.unit<0||f.unit>1){return{error:"Invalid unit for oFFs chunk."}}}return f};PngToy._sCAL=function(d){var h=d.view,c=d.chunks,a=d.allowInvalid,b=PngToy._findChunk(c,"sCAL"),f,e,g={};if(!b.length){return null}f=b.offset;g.unit=h.getUint8(f++);g.desc=["meters","radians"][g.unit]||null;e=PngToy._getStr(h,f,100000);g.unitsX=e.text;f=e.offset;e=PngToy._getStr(h,f,b.length-(f-b.offset));g.unitsY=e.text;if(!a){if(g.unit<1||g.unit>2){return{error:"Invalid unit"}}}return g};PngToy._pCAL=function(d){var l=d.view,c=d.chunks,a=d.allowInvalid,b=PngToy._findChunk(c,"pCAL"),m=!1,j,g,k={},h=[],e=0,f;if(!b.length){return null}j=b.offset;g=PngToy._getStr(l,j,80);k.calName=g.text;j=g.offset;if(g.warn){m=!0}k.x0=l.getInt32(j);k.x1=l.getInt32(j+4);k.eqType=l.getUint8(j+8);k.eqDesc=["Linear mapping","Base-e exponential mapping","Arbitrary-base exponential mapping","Hyperbolic mapping"][k.eqType]||null;k.paramCount=l.getUint8(j+9);j+=10;g=PngToy._getStr(l,j,10000);k.unitName=g.text;j=g.offset;if(g.warn){m=!0}f=k.paramCount-1;for(;e<f;e++){g=PngToy._getStr(l,j,10000);h.push(g.text);j=g.offset;if(g.warn){m=!0}}g=PngToy._getStr(l,j,b.length-(j-b.offset));h.push(g.text);if(g.warn){m=!0}k.parameters=h;if(!a){if(k.x0===k.x1){return{error:"Invalid x0 or x1."}}if(h.length!==k.paramCount){return{error:"Mismatching parameter count and number of parameters."}}if(k.eqType<0||k.eqType>3){return{error:"Invalid equation type."}}if(m){return{error:"One or more text field contains illegal chars."}}}return k};PngToy.prototype.decode=function(){var a=this;return new Promise(function(Q,P){var C=a.getChunk("IHDR"),Z=C.width,B=C.height,Y=C.type,m=C.depth,g=m/8,D=g===2,M=[1,0,3,1,2,0,4][Y],G=D?65535:255,l=M*g,F=Z*l,E=F+Math.ceil(l),S=a.getChunk("IDAT").buffer,o=new Uint8Array(Math.max(1,Math.ceil(Z*l)*B)),z=[r,s,t,u,v],R=0,n=0,i=0,N=0,ab=0,O,f=S.byteLength,T=S.length,H=[0,4,0,2,0,1,0],I=[0,0,4,0,2,0,1],U=[8,8,4,4,2,2,1],V=[8,8,8,4,4,2,2],d=[8,4,4,2,2,1,1],c=[8,8,4,4,2,2,1],L,W,X,J,e,b,aa;a.debug={pixelWidth:M,byteWidth:g,delta:l,lineLen:F,lineDlt:E,filters:[],preFilt:-1,postFilt:-1,srcPos:-1,srcLen:S.length,pass:0,x:-1,stepX:0,stepY:0,stepsX:0,stepsY:0};if(C.interlaced){if(typeof console!=="undefined"){console.log("WARN: In current alpha interlaced PNGs will not decode properly unless all line-filters are filter 0.")}L=ab=J=0;W=X=e=b=8;setTimeout(k,PngToy._delay)}else{setTimeout(j,PngToy._delay)}function j(){try{var x,ad,y,ac=a.debug.filters,h=PngToy._blockSize;l=Math.ceil(l);while(ab<B&&h>0){y=S[R++];x=z[y];if(ac.indexOf(y)<0){ac.push(y)}ad=Math.min(f,R+F);i=n;while(R<ad){o[n]=x(S[R++],n-l,n-F,n-E)&G;n++}N=i;h-=F;ab++}(ab<B)?setTimeout(j,PngToy._delay):Q(A())}catch(w){P(w)}}function k(){try{var x,y,ad,h=PngToy._blockSize,ac=a.debug.filters,ah=(Z/W)|0,ae=(B/X)|0,af=ah*ae,ag=new Uint8Array(af);while(ab<B){if(R>=T){ab=B;continue}y=S[R++];if(ac.indexOf(y)<0){ac.push(y)}if(y<0||y>4){a.debug.preFilt=S[R-2];a.debug.postFilt=S[R];a.debug.srcPos=R;a.debug.pass=L;a.debug.x=aa;a.debug.stepX=W;a.debug.stepY=X;a.debug.stepsX=Z/W;a.debug.stepsY=B/X}x=z[y];lineEnd=Math.min(f,Math.ceil(R+F));i=ab*F;N=Math.max(0,i-F);aa=J;while(aa<F){n=(i+aa*l)|0;ad=0;while(ad<M){O=x(S[R++],n-Math.ceil(l),n-F,n-Math.ceil(E))&G;n++;ad++}aa+=W*l}h-=F;ab+=X}if(ab<B){setTimeout(k,PngToy._delay)}else{if(++L<7){ab=I[L];J=H[L];W=U[L];X=V[L];e=d[L];b=c[L];setTimeout(k,PngToy._delay)}else{Q(A())}}}catch(w){P(w)}}function A(){var h=D?new Uint16Array(o.buffer):new Uint8Array(o.buffer);return{bitmap:h,width:Z,height:B,byteWidth:g,pixelWidth:M,depth:C.depth,type:C.type}}function p(h){return h<i?0:o[h]>>>0}function q(h){return h<N?0:o[h]>>>0}function r(h){return h}function s(w,h){return w+p(h)}function t(x,h,w){return x+q(w)}function u(x,h,w){return x+((p(h)+q(w))>>>1)}function v(y,h,w,x){return y+K(p(h),q(w),q(x))}function K(h,w,x){var y=h+w-x,ac=Math.abs(y-h),ad=Math.abs(y-w),ae=Math.abs(y-x);if(ac<=ad&&ac<=ae){return h}if(ad<=ae){return w}return x}})};PngToy.prototype.convertToRGBA=function(a,c){var b=this;c=c||{};return new Promise(function(N){if(a.type===6&&a.depth===8&&!c.useGamma){var Q=c.ignoreAspectRatio?null:b.getChunk("pHYs"),L=Q?Q.ppuY/(Q.ppuX||1):1,M=Q?Q.ppuX/(Q.ppuY||1):1;if(c.ignoreAspectRatio||(!c.ignoreAspectRatio&&L===1&&M===1)){N({bitmap:a.bitmap,width:a.width,height:a.height,ratioX:L,ratioY:M})}return}var J,R,H,k,G,d,T=a.width,D=a.height,S=a.type,g=a.depth,e=g/8,I=[1,0,3,1,2,0,4][S],l=p(S,g),P=a.bitmap,j=new Uint8Array(T*D*4),O=0,i=0,E=P.byteLength,K,F;if(a.type===3){J=b.getChunk("PLTE");G=J?J.palette:[]}R=b.getChunk("tRNS");d=R&&R.alphas?R.alphas:[];H=b.getChunk("pHYs");k=b.getChunk("gAMA");k=k?k.gamma:1;(function f(){var h=PngToy._blockSize,U=T*e*I,w=O+U;if(c.useGamma){F=F?F:b.getGammaLUT(k,c.gamma||1);while(O<E&&h>0){if(O>=w){O=Math.ceil(O);w=O+U}K=l();j[i++]=F[K[0]];j[i++]=F[K[1]];j[i++]=F[K[2]];j[i++]=K[3];h--}}else{while(O<E&&h>0){if(O>=w){O=Math.ceil(O);w=O+U}K=l();j[i++]=K[0];j[i++]=K[1];j[i++]=K[2];j[i++]=K[3];h--}}if(O<E){setTimeout(f,PngToy._delay)}else{N({bitmap:j,width:T,height:D,ratioX:H?H.ppuY/(H.ppuX||1):1,ratioY:H?H.ppuX/(H.ppuY||1):1})}})();function r(){var w=P[O|0],U=(O-(O|0))/e,V=(w&(128>>U))?255:0,h=d.length?((d[0]>>>8)&(128>>U)===V?0:255):255;O+=e;return[V,V,V,h]}function t(){var w=P[O|0],U=((O-(O|0))/e)<<1,V=(((w>>>U)&3)*85)&255,h=d.length?((((d[0]>>>8)&3)*85)&255===V?0:255):255;O+=e;return[V,V,V,h]}function u(){var w=P[O|0],U=((O-(O|0))/e),V=U?(w&15)<<4:w&240,h=d.length?(((d[0]&3840)>>>4)===V?0:255):255;O+=e;return[V,V,V,h]}function m(){var h=P[O|0],w=(O-(O|0))/e,U=(h&(128>>>w))?1:0,V=U*3;O+=e;return[G[V],G[V+1],G[V+2],255]}function n(){var w=P[O|0],U=((O-(O|0))/e)<<1,V=((w<<U)&192)>>>6,W=V*3,h=V<d.length?d[V]:255;O+=e;return[G[W],G[W+1],G[W+2],h]}function o(){var w=P[O|0],U=((O-(O|0))/e),V=U?w&15:(w&240)>>>4,W=V*3,h=V<d.length?d[V]:255;O+=e;return[G[W],G[W+1],G[W+2],h]}function q(){var w=P[O++],h=d.length&&w===(d[0]>>>8)?0:255;w&=255;return[w,w,w,h]}function s(){var w=P[O++],h=d.length&&d[0]===w?0:255;w&=255;return[w,w,w,h]}function z(){var Y=P[O++],X=P[O++],W=P[O++],V,U,w,h=255;if(d.length){V=d[0]>>>8;U=d[1]>>>8;w=d[2]>>>8;if(V===Y&&U===X&&w===W){h=0}}return[Y&255,X&255,W&255,h]}function B(){return[P[O++],P[O++],P[O++],P[O++]]}function A(){var V=P[O++],U=P[O++],w=P[O++],h=d.length&&d[0]===V&&d[1]===U&&d[2]===w?0:255;return[V&255,U&255,w&255,h]}function v(){var h=P[O++];return[h,h,h,P[O++]]}function x(){var h=P[O++]&255;return[h,h,h,P[O++]&255]}function y(){var w=P[O++],h=w*3;return[G[h],G[h+1],G[h+2],w<d.length?d[w]:255]}function C(){return[P[O++]&255,P[O++]&255,P[O++]&255,P[O++]&255]}function p(w,h){if(h===16){return[s,0,A,y,x,0,C][w]}else{if(h<8){switch(h){case 1:return w?m:r;case 2:return w?n:t;case 4:return w?o:u}}else{return[q,0,z,y,v,0,B][w]}}}})};PngToy.prototype.convertToCanvas=function(a,c){var b=this;c=c||{};return new Promise(function(e,d){b.convertToRGBA(a,c).then(function(f){try{var g=document.createElement("canvas"),i=g.getContext("2d");g.width=f.width;g.height=f.height;var l=i.createImageData(f.width,f.height);l.data.set(f.bitmap);i.putImageData(l,0,0);if((f.ratioY!==1||f.ratioX!==1)&&!c.ignoreAspectRatio){var m=document.createElement("canvas"),n=m.getContext("2d"),o,k;if(f.ratioY>=1){o=g.width;k=(g.height*f.ratioY)|0}else{if(f.ratioY<1){o=(g.width*f.ratioX)|0;k=g.height}}m.width=o;m.height=k;n.drawImage(g,0,0,o,k);g=m}e(g)}catch(j){d(j)}},d)})};"use strict";var ezlib=ezlib||{_async:function(f,e,a,b,j){j=j||{};var h=j.lapTime||200,g=j.delay||9,k=0,c,d,l,m;if(e){d=new ezlib.Deflate(j);c=j.asyncBlock||1<<18}else{d=new ezlib.Inflate(j);c=j.asyncBlock||1<<19}l=performance.now();(function i(){var o=f.subarray(k,k+c);k+=c;var n=k>=f.length;d.push(o,n);if(n){setTimeout(function(p){if(p.err){if(b){b({msg:p.msg})}}else{a({result:p.result})}},g,d)}else{m=performance.now();if(m-l>=h){l=m;if(j.progress){j.progress({progress:k/f.length})}setTimeout(i,g)}else{i()}}})()}};ezlib.inflateAsync=function(c,d,b,a){if(arguments.length===2&&typeof Promise!=="undefined"){return new Promise(function(f,e){ezlib._async(c,!1,f,e,d)})}else{ezlib._async(c,!1,b,a,d)}};(function(){var d=0;var g=2;var b=4;var e=0;var f=1;var c=2;var a=-5;ezlib.Inflate=function(i){var h;this.options=h=Object.assign(i||{},{chunkSize:16384,windowBits:0});if(h.raw&&(h.windowBits>=0)&&(h.windowBits<16)){h.windowBits=-h.windowBits;if(h.windowBits===0){h.windowBits=-15}}if((h.windowBits>=0)&&(h.windowBits<16)&&!(i&&i.windowBits)){h.windowBits+=32}if((h.windowBits>15)&&(h.windowBits<48)){if((h.windowBits&15)===0){h.windowBits|=15}}this.ended=!1;this.result;this.err=0;this.msg="";this.chunks=[];this.onend=null;this.onerror=null;this.strm=new ezlib.ZStream();this.strm.avail_out=0;var j=ezlib.zlib_inflate.inflateInit2(this.strm,h.windowBits);if(j!==e){throw new Error(ezlib.msg[j])}this.header=new ezlib.GZheader();ezlib.zlib_inflate.inflateGetHeader(this.strm,this.header)};ezlib.Inflate.prototype={push:function(k,m){var o=this.strm;var j=this.options.chunkSize;var l=this.options.dictionary;var n,h;var i=!1;if(this.ended){return !1}h=(m===~~m)?m:((m===!0)?b:d);o.input=k;o.next_in=0;o.avail_in=o.input.length;do{if(o.avail_out===0){o.output=new Uint8Array(j);o.next_out=0;o.avail_out=j}n=ezlib.zlib_inflate.inflate(o,d);if(n===c&&l){n=ezlib.zlib_inflate.inflateSetDictionary(this.strm,l)}if(n===a&&i===!0){n=e;i=!1}if(n!==f&&n!==e){this.onEnd(n);this.ended=!0;return !1}if(o.next_out){if(o.avail_out===0||n===f||(o.avail_in===0&&(h===b||h===g))){this.onData(ezlib.utils.shrinkBuf(o.output,o.next_out))}}if(o.avail_in===0&&o.avail_out===0){i=!0}}while((o.avail_in>0||o.avail_out===0)&&n!==f);if(n===f){h=b}if(h===b){n=ezlib.zlib_inflate.inflateEnd(this.strm);this.onEnd(n);this.ended=!0;return n===e}if(h===g){this.onEnd(e);o.avail_out=0}return !0},onData:function(h){this.chunks.push(h)},onEnd:function(h){if(h===e){this.result=ezlib.utils.flattenChunks(this.chunks);if(this.onend){setTimeout(function(i){i.onend(i.result)},5,this)}}else{if(this.onerror){setTimeout(function(i){i.onerror({status:h,msg:i.strm.msg})},5,this)}}this.chunks=[];this.err=h;this.msg=this.strm.msg}};ezlib.inflate=function(i,j){var h=new ezlib.Inflate(j);h.push(i,!0);if(h.err){throw h.msg}return h.result}})();ezlib.utils=ezlib.utils||{arraySet:function(a,d,e,c,b){a.set(d.subarray(e,e+c),b)},flattenChunks:function(b){var c,d,e,f,a,g;e=0;for(c=0,d=b.length;c<d;c++){e+=b[c].length}g=new Uint8Array(e);f=0;for(c=0,d=b.length;c<d;c++){a=b[c];g.set(a,f);f+=a.length}return g},shrinkBuf:function(a,b){if(a.length===b){return a}if(a.subarray){return a.subarray(0,b)}a.length=b;return a}};ezlib.msg=ezlib.msg||{2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"};ezlib.adler32=function(a,b,c,e){var f=(a&65535)|0,g=((a>>>16)&65535)|0,d=0;while(c!==0){d=c>2000?2000:c;c-=d;do{f=(f+b[e++])|0;g=(g+f)|0}while(--d);f%=65521;g%=65521}return(f|(g<<16))|0};ezlib.crc32=ezlib.crc32||(function(){var b=c();function c(){var d,g=[];for(var f=0;f<256;f++){d=f;for(var e=0;e<8;e++){d=((d&1)?(3988292384^(d>>>1)):(d>>>1))}g[f]=d}return g}function a(e,d,h,j){var k=b,f=j+h;e^=-1;for(var g=j;g<f;g++){e=(e>>>8)^k[(e^d[g])&255]}return(e^(-1))}return a})();ezlib.GZheader=function(){this.text=0;this.time=0;this.xflags=0;this.os=0;this.extra=null;this.extra_len=0;this.name="";this.comment="";this.hcrc=0;this.done=!1};ezlib.inflate_fast=ezlib.inflate_fast||(function(){var a=30;var b=12;return function(z,x){var y;var c;var q;var d;var e;var k;var j;var C;var A;var B;var w;var o;var f;var r;var g;var t;var i;var n;var u;var s;var h;var l;var m;var p,v;y=z.state;c=z.next_in;p=z.input;q=c+(z.avail_in-5);d=z.next_out;v=z.output;e=d-(x-z.avail_out);k=d+(z.avail_out-257);j=y.dmax;C=y.wsize;A=y.whave;B=y.wnext;w=y.window;o=y.hold;f=y.bits;r=y.lencode;g=y.distcode;t=(1<<y.lenbits)-1;i=(1<<y.distbits)-1;top:do{if(f<15){o+=p[c++]<<f;f+=8;o+=p[c++]<<f;f+=8}n=r[o&t];dolen:for(;;){u=n>>>24;o>>>=u;f-=u;u=(n>>>16)&255;if(u===0){v[d++]=n&65535}else{if(u&16){s=n&65535;u&=15;if(u){if(f<u){o+=p[c++]<<f;f+=8}s+=o&((1<<u)-1);o>>>=u;f-=u}if(f<15){o+=p[c++]<<f;f+=8;o+=p[c++]<<f;f+=8}n=g[o&i];dodist:for(;;){u=n>>>24;o>>>=u;f-=u;u=(n>>>16)&255;if(u&16){h=n&65535;u&=15;if(f<u){o+=p[c++]<<f;f+=8;if(f<u){o+=p[c++]<<f;f+=8}}h+=o&((1<<u)-1);if(h>j){z.msg="invalid distance too far back";y.mode=a;break top}o>>>=u;f-=u;u=d-e;if(h>u){u=h-u;if(u>A){if(y.sane){z.msg="invalid distance too far back";y.mode=a;break top}}l=0;m=w;if(B===0){l+=C-u;if(u<s){s-=u;do{v[d++]=w[l++]}while(--u);l=d-h;m=v}}else{if(B<u){l+=C+B-u;u-=B;if(u<s){s-=u;do{v[d++]=w[l++]}while(--u);l=0;if(B<s){u=B;s-=u;do{v[d++]=w[l++]}while(--u);l=d-h;m=v}}}else{l+=B-u;if(u<s){s-=u;do{v[d++]=w[l++]}while(--u);l=d-h;m=v}}}while(s>2){v[d++]=m[l++];v[d++]=m[l++];v[d++]=m[l++];s-=3}if(s){v[d++]=m[l++];if(s>1){v[d++]=m[l++]}}}else{l=d-h;do{v[d++]=v[l++];v[d++]=v[l++];v[d++]=v[l++];s-=3}while(s>2);if(s){v[d++]=v[l++];if(s>1){v[d++]=v[l++]}}}}else{if((u&64)===0){n=g[(n&65535)+(o&((1<<u)-1))];continue dodist}else{z.msg="invalid distance code";y.mode=a;break top}}break}}else{if((u&64)===0){n=r[(n&65535)+(o&((1<<u)-1))];continue dolen}else{if(u&32){y.mode=b;break top}else{z.msg="invalid literal/length code";y.mode=a;break top}}}}break}}while(c<q&&d<k);s=f>>3;c-=s;f-=s<<3;o&=(1<<f)-1;z.next_in=c;z.next_out=d;z.avail_in=(c<q?5+(q-c):5-(c-q));z.avail_out=(d<k?257+(k-d):257-(d-k));y.hold=o;y.bits=f}})();ezlib.zlib_inflate=ezlib.zlib_inflate||(function(){var d=0;var N=1;var n=2;var af=4;var ab=5;var al=6;var ai=0;var aj=1;var ah=2;var ak=-2;var ad=-3;var ag=-4;var ac=-5;var ae=8;var w=1;var u=2;var W=3;var S=4;var r=5;var s=6;var R=7;var e=8;var v=9;var j=10;var i=11;var X=12;var Y=13;var T=14;var g=15;var f=16;var V=17;var M=18;var c=19;var I=20;var H=21;var J=22;var k=23;var l=24;var P=25;var O=26;var b=27;var L=28;var o=29;var a=30;var Q=31;var U=32;var q=852;var p=592;var h=15;function am(an){return an>>>24|an>>>8&65280|an<<8&16711680|an<<24}function G(){this.mode=0;this.last=!1;this.wrap=0;this.havedict=!1;this.flags=0;this.dmax=0;this.check=0;this.total=0;this.head=null;this.wbits=0;this.wsize=0;this.whave=0;this.wnext=0;this.window=null;this.hold=0;this.bits=0;this.length=0;this.offset=0;this.extra=0;this.lencode=null;this.distcode=null;this.lenbits=0;this.distbits=0;this.ncode=0;this.nlen=0;this.ndist=0;this.have=0;this.lens=new Uint16Array(320);this.work=new Uint16Array(288);this.lendyn=null;this.distdyn=null;this.sane=0}function E(ao){var an;if(!ao||!ao.state){return ak}an=ao.state;ao.total_in=ao.total_out=an.total=0;ao.msg="";if(an.wrap){ao.adler=an.wrap&1}an.mode=w;an.last=0;an.havedict=0;an.dmax=32768;an.head=null;an.hold=0;an.bits=0;an.lencode=an.lendyn=new Int32Array(q);an.distcode=an.distdyn=new Int32Array(p);an.sane=1;return ai}function C(ao){var an;if(!ao||!ao.state){return ak}an=ao.state;an.wsize=0;an.whave=0;an.wnext=0;return E(ao)}function D(ao,ap){var aq;var an;if(!ao||!ao.state){return ak}an=ao.state;if(ap<0){aq=0;ap=-ap}else{aq=(ap>>4)+1;if(ap<48){ap&=15}}if(ap&&(ap<8||ap>15)){return ak}if(an.window!==null&&an.wbits!==ap){an.window=null}an.wrap=aq;an.wbits=ap;return C(ao)}function B(ap,aq){var an;var ao;if(!ap){return ak}ao=new G();ap.state=ao;ao.window=null;an=D(ap,aq);if(an!==ai){ap.state=null}return an}function A(an){return B(an,h)}var aa=!0;var K,m;function t(an){if(aa){var ao;K=new Int32Array(512);m=new Int32Array(32);ao=0;while(ao<144){an.lens[ao++]=8}while(ao<256){an.lens[ao++]=9}while(ao<280){an.lens[ao++]=7}while(ao<288){an.lens[ao++]=8}ezlib.inflate_table(N,an.lens,0,288,K,0,an.work,{bits:9});ao=0;while(ao<32){an.lens[ao++]=5}ezlib.inflate_table(n,an.lens,0,32,m,0,an.work,{bits:5});aa=!1}an.lencode=K;an.lenbits=9;an.distcode=m;an.distbits=5}function Z(at,aq,ap,an){var ao;var ar=at.state;if(ar.window===null){ar.wsize=1<<ar.wbits;ar.wnext=0;ar.whave=0;ar.window=new Uint8Array(ar.wsize)}if(an>=ar.wsize){ezlib.utils.arraySet(ar.window,aq,ap-ar.wsize,ar.wsize,0);ar.wnext=0;ar.whave=ar.wsize}else{ao=ar.wsize-ar.wnext;if(ao>an){ao=an}ezlib.utils.arraySet(ar.window,aq,ap-an,ao,ar.wnext);an-=ao;if(an){ezlib.utils.arraySet(ar.window,aq,ap-an,an,0);ar.wnext=an;ar.whave=ar.wsize}else{ar.wnext+=ao;if(ar.wnext===ar.wsize){ar.wnext=0}if(ar.whave<ar.wsize){ar.whave+=ao}}}return 0}function x(aQ,ar){var aP;var aC,aM;var aJ;var aN;var av,aG;var aB;var ap;var an,ao;var aq;var at;var au;var ax=0;var ay,az,aA;var aD,aE,aF;var aH;var aO;var aw=new Uint8Array(4);var aK;var aI;var aL=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!aQ||!aQ.state||!aQ.output||(!aQ.input&&aQ.avail_in!==0)){return ak}aP=aQ.state;if(aP.mode===X){aP.mode=Y}aN=aQ.next_out;aM=aQ.output;aG=aQ.avail_out;aJ=aQ.next_in;aC=aQ.input;av=aQ.avail_in;aB=aP.hold;ap=aP.bits;an=av;ao=aG;aO=ai;inf_leave:for(;;){switch(aP.mode){case w:if(aP.wrap===0){aP.mode=Y;break}while(ap<16){if(av===0){break inf_leave}av--;aB+=aC[aJ++]<<ap;ap+=8}if((aP.wrap&2)&&aB===35615){aP.check=0;aw[0]=aB&255;aw[1]=(aB>>>8)&255;aP.check=ezlib.crc32(aP.check,aw,2,0);aB=0;ap=0;aP.mode=u;break}aP.flags=0;if(aP.head){aP.head.done=!1}if(!(aP.wrap&1)||(((aB&255)<<8)+(aB>>8))%31){aQ.msg="incorrect header check";aP.mode=a;break}if((aB&15)!==ae){aQ.msg="unknown compression method";aP.mode=a;break}aB>>>=4;ap-=4;aH=(aB&15)+8;if(aP.wbits===0){aP.wbits=aH}else{if(aH>aP.wbits){aQ.msg="invalid window size";aP.mode=a;break}}aP.dmax=1<<aH;aQ.adler=aP.check=1;aP.mode=aB&512?j:X;aB=0;ap=0;break;case u:while(ap<16){if(av===0){break inf_leave}av--;aB+=aC[aJ++]<<ap;ap+=8}aP.flags=aB;if((aP.flags&255)!==ae){aQ.msg="unknown compression method";aP.mode=a;break}if(aP.flags&57344){aQ.msg="unknown header flags set";aP.mode=a;break}if(aP.head){aP.head.text=((aB>>8)&1)}if(aP.flags&512){aw[0]=aB&255;aw[1]=(aB>>>8)&255;aP.check=ezlib.crc32(aP.check,aw,2,0)}aB=0;ap=0;aP.mode=W;case W:while(ap<32){if(av===0){break inf_leave}av--;aB+=aC[aJ++]<<ap;ap+=8}if(aP.head){aP.head.time=aB}if(aP.flags&512){aw[0]=aB&255;aw[1]=(aB>>>8)&255;aw[2]=(aB>>>16)&255;aw[3]=(aB>>>24)&255;aP.check=ezlib.crc32(aP.check,aw,4,0)}aB=0;ap=0;aP.mode=S;case S:while(ap<16){if(av===0){break inf_leave}av--;aB+=aC[aJ++]<<ap;ap+=8}if(aP.head){aP.head.xflags=(aB&255);aP.head.os=(aB>>8)}if(aP.flags&512){aw[0]=aB&255;aw[1]=(aB>>>8)&255;aP.check=ezlib.crc32(aP.check,aw,2,0)}aB=0;ap=0;aP.mode=r;case r:if(aP.flags&1024){while(ap<16){if(av===0){break inf_leave}av--;aB+=aC[aJ++]<<ap;ap+=8}aP.length=aB;if(aP.head){aP.head.extra_len=aB}if(aP.flags&512){aw[0]=aB&255;aw[1]=(aB>>>8)&255;aP.check=ezlib.crc32(aP.check,aw,2,0)}aB=0;ap=0}else{if(aP.head){aP.head.extra=null}}aP.mode=s;case s:if(aP.flags&1024){aq=aP.length;if(aq>av){aq=av}if(aq){if(aP.head){aH=aP.head.extra_len-aP.length;if(!aP.head.extra){aP.head.extra=new Array(aP.head.extra_len)}ezlib.utils.arraySet(aP.head.extra,aC,aJ,aq,aH)}if(aP.flags&512){aP.check=ezlib.crc32(aP.check,aC,aq,aJ)}av-=aq;aJ+=aq;aP.length-=aq}if(aP.length){break inf_leave}}aP.length=0;aP.mode=R;case R:if(aP.flags&2048){if(av===0){break inf_leave}aq=0;do{aH=aC[aJ+aq++];if(aP.head&&aH&&(aP.length<65536)){aP.head.name+=String.fromCharCode(aH)}}while(aH&&aq<av);if(aP.flags&512){aP.check=ezlib.crc32(aP.check,aC,aq,aJ)}av-=aq;aJ+=aq;if(aH){break inf_leave}}else{if(aP.head){aP.head.name=null}}aP.length=0;aP.mode=e;case e:if(aP.flags&4096){if(av===0){break inf_leave}aq=0;do{aH=aC[aJ+aq++];if(aP.head&&aH&&(aP.length<65536)){aP.head.comment+=String.fromCharCode(aH)}}while(aH&&aq<av);if(aP.flags&512){aP.check=ezlib.crc32(aP.check,aC,aq,aJ)}av-=aq;aJ+=aq;if(aH){break inf_leave}}else{if(aP.head){aP.head.comment=null}}aP.mode=v;case v:if(aP.flags&512){while(ap<16){if(av===0){break inf_leave}av--;aB+=aC[aJ++]<<ap;ap+=8}if(aB!==(aP.check&65535)){aQ.msg="header crc mismatch";aP.mode=a;break}aB=0;ap=0}if(aP.head){aP.head.hcrc=((aP.flags>>9)&1);aP.head.done=!0}aQ.adler=aP.check=0;aP.mode=X;break;case j:while(ap<32){if(av===0){break inf_leave}av--;aB+=aC[aJ++]<<ap;ap+=8}aQ.adler=aP.check=am(aB);aB=0;ap=0;aP.mode=i;case i:if(aP.havedict===0){aQ.next_out=aN;aQ.avail_out=aG;aQ.next_in=aJ;aQ.avail_in=av;aP.hold=aB;aP.bits=ap;return ah}aQ.adler=aP.check=1;aP.mode=X;case X:if(ar===ab||ar===al){break inf_leave}case Y:if(aP.last){aB>>>=ap&7;ap-=ap&7;aP.mode=b;break}while(ap<3){if(av===0){break inf_leave}av--;aB+=aC[aJ++]<<ap;ap+=8}aP.last=(aB&1);aB>>>=1;ap-=1;switch((aB&3)){case 0:aP.mode=T;break;case 1:t(aP);aP.mode=I;if(ar===al){aB>>>=2;ap-=2;break inf_leave}break;case 2:aP.mode=V;break;case 3:aQ.msg="invalid block type";aP.mode=a}aB>>>=2;ap-=2;break;case T:aB>>>=ap&7;ap-=ap&7;while(ap<32){if(av===0){break inf_leave}av--;aB+=aC[aJ++]<<ap;ap+=8}if((aB&65535)!==((aB>>>16)^65535)){aQ.msg="invalid stored block lengths";aP.mode=a;break}aP.length=aB&65535;aB=0;ap=0;aP.mode=g;if(ar===al){break inf_leave}case g:aP.mode=f;case f:aq=aP.length;if(aq){if(aq>av){aq=av}if(aq>aG){aq=aG}if(aq===0){break inf_leave}ezlib.utils.arraySet(aM,aC,aJ,aq,aN);av-=aq;aJ+=aq;aG-=aq;aN+=aq;aP.length-=aq;break}aP.mode=X;break;case V:while(ap<14){if(av===0){break inf_leave}av--;aB+=aC[aJ++]<<ap;ap+=8}aP.nlen=(aB&31)+257;aB>>>=5;ap-=5;aP.ndist=(aB&31)+1;aB>>>=5;ap-=5;aP.ncode=(aB&15)+4;aB>>>=4;ap-=4;if(aP.nlen>286||aP.ndist>30){aQ.msg="too many length or distance symbols";aP.mode=a;break}aP.have=0;aP.mode=M;case M:while(aP.have<aP.ncode){while(ap<3){if(av===0){break inf_leave}av--;aB+=aC[aJ++]<<ap;ap+=8}aP.lens[aL[aP.have++]]=(aB&7);aB>>>=3;ap-=3}while(aP.have<19){aP.lens[aL[aP.have++]]=0}aP.lencode=aP.lendyn;aP.lenbits=7;aK={bits:aP.lenbits};aO=ezlib.inflate_table(d,aP.lens,0,19,aP.lencode,0,aP.work,aK);aP.lenbits=aK.bits;if(aO){aQ.msg="invalid code lengths set";aP.mode=a;break}aP.have=0;aP.mode=c;case c:while(aP.have<aP.nlen+aP.ndist){for(;;){ax=aP.lencode[aB&((1<<aP.lenbits)-1)];ay=ax>>>24;az=(ax>>>16)&255;aA=ax&65535;if((ay)<=ap){break}if(av===0){break inf_leave}av--;aB+=aC[aJ++]<<ap;ap+=8}if(aA<16){aB>>>=ay;ap-=ay;aP.lens[aP.have++]=aA}else{if(aA===16){aI=ay+2;while(ap<aI){if(av===0){break inf_leave}av--;aB+=aC[aJ++]<<ap;ap+=8}aB>>>=ay;ap-=ay;if(aP.have===0){aQ.msg="invalid bit length repeat";aP.mode=a;break}aH=aP.lens[aP.have-1];aq=3+(aB&3);aB>>>=2;ap-=2}else{if(aA===17){aI=ay+3;while(ap<aI){if(av===0){break inf_leave}av--;aB+=aC[aJ++]<<ap;ap+=8}aB>>>=ay;ap-=ay;aH=0;aq=3+(aB&7);aB>>>=3;ap-=3}else{aI=ay+7;while(ap<aI){if(av===0){break inf_leave}av--;aB+=aC[aJ++]<<ap;ap+=8}aB>>>=ay;ap-=ay;aH=0;aq=11+(aB&127);aB>>>=7;ap-=7}}if(aP.have+aq>aP.nlen+aP.ndist){aQ.msg="invalid bit length repeat";aP.mode=a;break}while(aq--){aP.lens[aP.have++]=aH}}}if(aP.mode===a){break}if(aP.lens[256]===0){aQ.msg="invalid code -- missing end-of-block";aP.mode=a;break}aP.lenbits=9;aK={bits:aP.lenbits};aO=ezlib.inflate_table(N,aP.lens,0,aP.nlen,aP.lencode,0,aP.work,aK);aP.lenbits=aK.bits;if(aO){aQ.msg="invalid literal/lengths set";aP.mode=a;break}aP.distbits=6;aP.distcode=aP.distdyn;aK={bits:aP.distbits};aO=ezlib.inflate_table(n,aP.lens,aP.nlen,aP.ndist,aP.distcode,0,aP.work,aK);aP.distbits=aK.bits;if(aO){aQ.msg="invalid distances set";aP.mode=a;break}aP.mode=I;if(ar===al){break inf_leave}case I:aP.mode=H;case H:if(av>=6&&aG>=258){aQ.next_out=aN;aQ.avail_out=aG;aQ.next_in=aJ;aQ.avail_in=av;aP.hold=aB;aP.bits=ap;ezlib.inflate_fast(aQ,ao);aN=aQ.next_out;aM=aQ.output;aG=aQ.avail_out;aJ=aQ.next_in;aC=aQ.input;av=aQ.avail_in;aB=aP.hold;ap=aP.bits;break}for(;;){ax=aP.lencode[aB&((1<<aP.lenbits)-1)];ay=ax>>>24;az=(ax>>>16)&255;aA=ax&65535;if(ay<=ap){break}if(av===0){break inf_leave}av--;aB+=aC[aJ++]<<ap;ap+=8}if(az&&(az&240)===0){aD=ay;aE=az;aF=aA;for(;;){ax=aP.lencode[aF+((aB&((1<<(aD+aE))-1))>>aD)];ay=ax>>>24;az=(ax>>>16)&255;aA=ax&65535;if((aD+ay)<=ap){break}if(av===0){break inf_leave}av--;aB+=aC[aJ++]<<ap;ap+=8}aB>>>=aD;ap-=aD}aB>>>=ay;ap-=ay;aP.length=aA;if(az===0){aP.mode=O;break}if(az&32){aP.mode=X;break}if(az&64){aQ.msg="invalid literal/length code";aP.mode=a;break}aP.extra=az&15;aP.mode=J;case J:if(aP.extra){aI=aP.extra;while(ap<aI){if(av===0){break inf_leave}av--;aB+=aC[aJ++]<<ap;ap+=8}aP.length+=aB&((1<<aP.extra)-1);aB>>>=aP.extra;ap-=aP.extra}aP.mode=k;case k:for(;;){ax=aP.distcode[aB&((1<<aP.distbits)-1)];ay=ax>>>24;az=(ax>>>16)&255;aA=ax&65535;if((ay)<=ap){break}if(av===0){break inf_leave}av--;aB+=aC[aJ++]<<ap;ap+=8}if((az&240)===0){aD=ay;aE=az;aF=aA;for(;;){ax=aP.distcode[aF+((aB&((1<<(aD+aE))-1))>>aD)];ay=ax>>>24;az=(ax>>>16)&255;aA=ax&65535;if((aD+ay)<=ap){break}if(av===0){break inf_leave}av--;aB+=aC[aJ++]<<ap;ap+=8}aB>>>=aD;ap-=aD}aB>>>=ay;ap-=ay;if(az&64){aQ.msg="invalid distance code";aP.mode=a;break}aP.offset=aA;aP.extra=(az)&15;aP.mode=l;case l:if(aP.extra){aI=aP.extra;while(ap<aI){if(av===0){break inf_leave}av--;aB+=aC[aJ++]<<ap;ap+=8}aP.offset+=aB&((1<<aP.extra)-1);aB>>>=aP.extra;ap-=aP.extra}if(aP.offset>aP.dmax){aQ.msg="invalid distance too far back";aP.mode=a;break}aP.mode=P;case P:if(aG===0){break inf_leave}aq=ao-aG;if(aP.offset>aq){aq=aP.offset-aq;if(aq>aP.whave){if(aP.sane){aQ.msg="invalid distance too far back";aP.mode=a;break}}if(aq>aP.wnext){aq-=aP.wnext;at=aP.wsize-aq}else{at=aP.wnext-aq}if(aq>aP.length){aq=aP.length}au=aP.window}else{au=aM;at=aN-aP.offset;aq=aP.length}if(aq>aG){aq=aG}aG-=aq;aP.length-=aq;do{aM[aN++]=au[at++]}while(--aq);if(aP.length===0){aP.mode=H}break;case O:if(aG===0){break inf_leave}aM[aN++]=aP.length;aG--;aP.mode=H;break;case b:if(aP.wrap){while(ap<32){if(av===0){break inf_leave}av--;aB|=aC[aJ++]<<ap;ap+=8}ao-=aG;aQ.total_out+=ao;aP.total+=ao;if(ao){aQ.adler=aP.check=(aP.flags?ezlib.crc32(aP.check,aM,ao,aN-ao):ezlib.adler32(aP.check,aM,ao,aN-ao))}ao=aG;if((aP.flags?aB:am(aB))!==aP.check){aQ.msg="incorrect data check";aP.mode=a;break}aB=0;ap=0}aP.mode=L;case L:if(aP.wrap&&aP.flags){while(ap<32){if(av===0){break inf_leave}av--;aB+=aC[aJ++]<<ap;ap+=8}if(aB!==(aP.total&4294967295)){aQ.msg="incorrect length check";aP.mode=a;break}aB=0;ap=0}aP.mode=o;case o:aO=aj;break inf_leave;case a:aO=ad;break inf_leave;case Q:return ag;case U:default:return ak}}aQ.next_out=aN;aQ.avail_out=aG;aQ.next_in=aJ;aQ.avail_in=av;aP.hold=aB;aP.bits=ap;if(aP.wsize||(ao!==aQ.avail_out&&aP.mode<a&&(aP.mode<b||ar!==af))){if(Z(aQ,aQ.output,aQ.next_out,ao-aQ.avail_out)){aP.mode=Q;return ag}}an-=aQ.avail_in;ao-=aQ.avail_out;aQ.total_in+=an;aQ.total_out+=ao;aP.total+=ao;if(aP.wrap&&ao){aQ.adler=aP.check=(aP.flags?ezlib.crc32(aP.check,aM,ao,aQ.next_out-ao):ezlib.adler32(aP.check,aM,ao,aQ.next_out-ao))}aQ.data_type=aP.bits+(aP.last?64:0)+(aP.mode===X?128:0)+(aP.mode===I||aP.mode===g?256:0);if(((an===0&&ao===0)||ar===af)&&aO===ai){aO=ac}return aO}function y(ao){if(!ao||!ao.state){return ak}var an=ao.state;if(an.window){an.window=null}ao.state=null;return ai}function z(ap,an){var ao;if(!ap||!ap.state){return ak}ao=ap.state;if((ao.wrap&2)===0){return ak}ao.head=an;an.done=!1;return ai}function F(at,ao){var ap=ao.length;var ar;var an;var aq;if(!at||!at.state){return ak}ar=at.state;if(ar.wrap!==0&&ar.mode!==i){return ak}if(ar.mode===i){an=1;an=ezlib.adler32(an,ao,ap,0);if(an!==ar.check){return ad}}aq=Z(at,ao,ap,ap);if(aq){ar.mode=Q;return ag}ar.havedict=1;return ai}return{inflateReset:C,inflateReset2:D,inflateResetKeep:E,inflateInit:A,inflateInit2:B,inflate:x,inflateEnd:y,inflateGetHeader:z,inflateSetDictionary:F,inflateInfo:"ezlib"}})();ezlib.inflate_table=ezlib.inflate_table||(function(){var j=15;var f=852;var e=592;var a=0;var h=1;var d=2;var g=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0];var i=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78];var b=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0];var c=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];return function(Q,D,E,n,O,P,S,L){var m=L.bits;var C;var N;var I,H;var M;var p;var q;var B;var R;var y;var A;var u;var F;var G;var J;var k=null;var l=0;var r;var o=new Uint16Array(j+1);var K=new Uint16Array(j+1);var s=null;var t=0;var v,w,x;for(C=0;C<=j;C++){o[C]=0}for(N=0;N<n;N++){o[D[E+N]]++}M=m;for(H=j;H>=1;H--){if(o[H]!==0){break}}if(M>H){M=H}if(H===0){O[P++]=(1<<24)|(64<<16)|0;O[P++]=(1<<24)|(64<<16)|0;L.bits=1;return 0}for(I=1;I<H;I++){if(o[I]!==0){break}}if(M<I){M=I}B=1;for(C=1;C<=j;C++){B<<=1;B-=o[C];if(B<0){return -1}}if(B>0&&(Q===a||H!==1)){return -1}K[1]=0;for(C=1;C<j;C++){K[C+1]=K[C]+o[C]}for(N=0;N<n;N++){if(D[E+N]!==0){S[K[D[E+N]]++]=N}}if(Q===a){k=s=S;r=19}else{if(Q===h){k=g;l-=257;s=i;t-=257;r=256}else{k=b;s=c;r=-1}}y=0;N=0;C=I;J=P;p=M;q=0;F=-1;R=1<<M;G=R-1;if((Q===h&&R>f)||(Q===d&&R>e)){return 1}var z=0;for(;;){z++;v=C-q;if(S[N]<r){w=0;x=S[N]}else{if(S[N]>r){w=s[t+S[N]];x=k[l+S[N]]}else{w=32+64;x=0}}A=1<<(C-q);u=1<<p;I=u;do{u-=A;O[J+(y>>q)+u]=(v<<24)|(w<<16)|x|0}while(u!==0);A=1<<(C-1);while(y&A){A>>=1}if(A!==0){y&=A-1;y+=A}else{y=0}N++;if(--o[C]===0){if(C===H){break}C=D[E+S[N]]}if(C>M&&(y&G)!==F){if(q===0){q=M}J+=I;p=C-q;B=1<<p;while(p+q<H){B-=o[p+q];if(B<=0){break}p++;B<<=1}R+=1<<p;if((Q===h&&R>f)||(Q===d&&R>e)){return 1}F=y&G;O[F]=(M<<24)|(p<<16)|(J-P)|0}}if(y!==0){O[J+y]=((C-q)<<24)|(64<<16)|0}L.bits=M;return 0}})();ezlib.ZStream=function(){this.input=null;this.next_in=0;this.avail_in=0;this.total_in=0;this.output=null;this.next_out=0;this.avail_out=0;this.total_out=0;this.msg="";this.state=null;this.data_type=2;this.adler=0};function PngImage(){var m="",i=this,j=new PngToy(),a,b,n=0,g=0,c=!1;this.onload=null;this.onerror=null;this.onabort=null;Object.defineProperty(this,"src",{get:function(){return m},set:function(h){m=h;k()}});Object.defineProperty(this,"width",{get:function(){return n}});Object.defineProperty(this,"height",{get:function(){return g}});Object.defineProperty(this,"naturalWidth",{get:function(){return n}});Object.defineProperty(this,"naturalHeight",{get:function(){return g}});Object.defineProperty(this,"image",{get:function(){return b}});Object.defineProperty(this,"pngtoy",{get:function(){return j}});Object.defineProperty(this,"complete",{get:function(){return c}});function k(){j.fetch(m).then(e,f)}function e(h){j.decode(h).then(d,f)}function d(h){a=h;n=h.width;g=h.height;j.convertToCanvas(h,{ignoreAspectRatio:!1,useGamma:!1}).then(l.bind(i),f.bind(i))}function l(h){b=h;c=!0;if(i.onload){i.onload({timeStamp:Date.now()})}}function f(h){if(i.onerror){i.onerror({message:h,timeStamp:Date.now()})}}};