@mylasertools/kerfscript 0.0.0-stage → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/CLA.md +73 -0
  3. package/COMMERCIAL-LICENSE.md +68 -0
  4. package/LANGUAGE.md +295 -0
  5. package/LICENSE +661 -0
  6. package/README.md +148 -2
  7. package/THIRD-PARTY-NOTICES.md +69 -0
  8. package/TRADEMARKS.md +39 -0
  9. package/dist/ast.d.cts +160 -0
  10. package/dist/ast.d.ts +160 -0
  11. package/dist/cli.d.cts +1 -0
  12. package/dist/cli.d.ts +1 -0
  13. package/dist/cli.js +19226 -0
  14. package/dist/customizer.d.cts +19 -0
  15. package/dist/customizer.d.ts +19 -0
  16. package/dist/evaluator.d.cts +106 -0
  17. package/dist/evaluator.d.ts +106 -0
  18. package/dist/export/dxf.d.cts +3 -0
  19. package/dist/export/dxf.d.ts +3 -0
  20. package/dist/export/svg.d.cts +13 -0
  21. package/dist/export/svg.d.ts +13 -0
  22. package/dist/functions.d.cts +4 -0
  23. package/dist/functions.d.ts +4 -0
  24. package/dist/geometry.d.cts +44 -0
  25. package/dist/geometry.d.ts +44 -0
  26. package/dist/index.cjs +44 -0
  27. package/dist/index.d.cts +10 -0
  28. package/dist/index.d.ts +10 -0
  29. package/dist/index.js +44 -0
  30. package/dist/joinery.d.cts +7 -0
  31. package/dist/joinery.d.ts +7 -0
  32. package/dist/lexer.d.cts +28 -0
  33. package/dist/lexer.d.ts +28 -0
  34. package/dist/parser.d.cts +6 -0
  35. package/dist/parser.d.ts +6 -0
  36. package/dist/paths.d.cts +28 -0
  37. package/dist/paths.d.ts +28 -0
  38. package/dist/render.d.cts +57 -0
  39. package/dist/render.d.ts +57 -0
  40. package/dist/stdlib.d.cts +1 -0
  41. package/dist/stdlib.d.ts +1 -0
  42. package/dist/text.d.cts +36 -0
  43. package/dist/text.d.ts +36 -0
  44. package/dist/values.d.cts +25 -0
  45. package/dist/values.d.ts +25 -0
  46. package/docs/cli.md +61 -0
  47. package/docs/compatibility.md +89 -0
  48. package/docs/customizer.md +62 -0
  49. package/docs/getting-started.md +98 -0
  50. package/docs/javascript.md +98 -0
  51. package/docs/kerf.md +70 -0
  52. package/docs/layers.md +74 -0
  53. package/docs/openscad.md +67 -0
  54. package/docs/parts-and-sheets.md +68 -0
  55. package/docs/versions.md +43 -0
  56. package/package.json +85 -4
package/dist/index.cjs ADDED
@@ -0,0 +1,44 @@
1
+ /*! @mylasertools/kerfscript | (c) MyLaserTools | AGPL-3.0-only or commercial licence, see COMMERCIAL-LICENSE.md. Includes Clipper2 (BSL-1.0) and opentype.js (MIT), see THIRD-PARTY-NOTICES.md. */
2
+ "use strict";var _t=Object.defineProperty;var ji=Object.getOwnPropertyDescriptor;var Ki=Object.getOwnPropertyNames;var Ji=Object.prototype.hasOwnProperty;var Qi=(t,e,r)=>e in t?_t(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var eo=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),to=(t,e)=>{for(var r in e)_t(t,r,{get:e[r],enumerable:!0})},ro=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Ki(e))!Ji.call(t,s)&&s!==r&&_t(t,s,{get:()=>e[s],enumerable:!(n=ji(e,s))||n.enumerable});return t};var no=t=>ro(_t({},"__esModule",{value:!0}),t);var y=(t,e,r)=>Qi(t,typeof e!="symbol"?e+"":e,r);var ls=eo((jc,us)=>{us.exports={}});var ah={};to(ah,{DEFAULT_LAYERS:()=>Mn,KerfError:()=>z,LANGUAGE_VERSION:()=>oh,VERSION:()=>ih,parameters:()=>_i,parse:()=>Ke,render:()=>$i,tokenize:()=>vr});module.exports=no(ah);var Re=t=>typeof t=="object"&&t!==null&&!Array.isArray(t)&&t.type==="range",Ze=t=>typeof t=="object"&&t!==null&&!Array.isArray(t)&&t.type==="function",Un=t=>typeof t=="number";function Kt(t,e){let r=[];if(t.step===0||(t.step>0?t.start>t.end:t.start<t.end))return r;let n=Math.floor((t.end-t.start)/t.step+1e-9)+1;if(n>e)throw new Error(`Range has ${n} steps, more than the limit of ${e}`);for(let s=0;s<n;s++)r.push(t.start+s*t.step);return r}function be(t){return t===void 0||t===!1||t===0||t===""?!1:Array.isArray(t)?t.length>0:typeof t=="number"?!Number.isNaN(t):!0}function ot(t,e){return Array.isArray(t)&&Array.isArray(e)?t.length===e.length&&t.every((r,n)=>ot(r,e[n])):Re(t)&&Re(e)?t.start===e.start&&t.step===e.step&&t.end===e.end:t===e}function we(t){return t===void 0?"undef":Array.isArray(t)?"list":Re(t)?"range":Ze(t)?"function":typeof t}function Pe(t){return t===void 0?"undef":typeof t=="string"?JSON.stringify(t):typeof t=="number"?jt(t):Array.isArray(t)?`[${t.map(Pe).join(", ")}]`:Re(t)?`[${jt(t.start)}:${jt(t.step)}:${jt(t.end)}]`:Ze(t)?`function(${t.params.map(e=>e.name).join(", ")})`:String(t)}function Jt(t){return typeof t=="string"?t:Pe(t)}function jt(t){return Number.isInteger(t)?String(t):String(Number(t.toPrecision(10)))}var at=Math.PI/180;function Z(t,e){if(typeof t!="number")throw new Error(`${e}() needs a number, got ${we(t)}`);return t}function Ne(t,e){if(Array.isArray(t))return t;if(Re(t))return Kt(t,1e6);if(typeof t=="string")return[...t];throw new Error(`${e}() needs a list, got ${we(t)}`)}var Se=(t,e)=>r=>typeof r[0]=="number"?Rr(e(r[0])):void 0;function Rr(t){let e=Math.round(t);return Math.abs(t-e)<1e-12?e:t}function so(t){let e=Math.floor(t)>>>0||2654435769;return()=>{e=e+1831565813>>>0;let r=e;return r=Math.imul(r^r>>>15,r|1),r^=r+Math.imul(r^r>>>7,r|61),((r^r>>>14)>>>0)/4294967296}}function Rn(t,e,r){let n=t.length===1&&Array.isArray(t[0])?t[0]:t;if(n.length)return e(n.map(s=>Z(s,r)))}var Nn={abs:Se("abs",Math.abs),sign:Se("sign",Math.sign),floor:Se("floor",Math.floor),ceil:Se("ceil",Math.ceil),round:Se("round",t=>t<0?-Math.round(-t):Math.round(t)),sqrt:Se("sqrt",Math.sqrt),exp:Se("exp",Math.exp),ln:Se("ln",Math.log),log:t=>t.length===2?Math.log(Z(t[1],"log"))/Math.log(Z(t[0],"log")):Rr(Math.log10(Z(t[0],"log"))),sin:Se("sin",t=>Math.sin(t*at)),cos:Se("cos",t=>Math.cos(t*at)),tan:Se("tan",t=>Math.tan(t*at)),asin:Se("asin",t=>Math.asin(t)/at),acos:Se("acos",t=>Math.acos(t)/at),atan:Se("atan",t=>Math.atan(t)/at),atan2:t=>Rr(Math.atan2(Z(t[0],"atan2"),Z(t[1],"atan2"))/at),pow:t=>Math.pow(Z(t[0],"pow"),Z(t[1],"pow")),min:t=>Rn(t,e=>Math.min(...e),"min"),max:t=>Rn(t,e=>Math.max(...e),"max"),clamp:t=>Math.min(Math.max(Z(t[0],"clamp"),Z(t[1],"clamp")),Z(t[2],"clamp")),lerp:t=>{let e=Z(t[2],"lerp");if(Array.isArray(t[0])&&Array.isArray(t[1])){let r=t[1];return t[0].map((n,s)=>Z(n,"lerp")+(Z(r[s],"lerp")-Z(n,"lerp"))*e)}return Z(t[0],"lerp")+(Z(t[1],"lerp")-Z(t[0],"lerp"))*e},norm:t=>Math.hypot(...Ne(t[0],"norm").map(e=>Z(e,"norm"))),cross:t=>{let e=Ne(t[0],"cross").map(n=>Z(n,"cross")),r=Ne(t[1],"cross").map(n=>Z(n,"cross"));return e.length===2?e[0]*r[1]-e[1]*r[0]:[e[1]*r[2]-e[2]*r[1],e[2]*r[0]-e[0]*r[2],e[0]*r[1]-e[1]*r[0]]},len:t=>typeof t[0]=="string"?[...t[0]].length:Array.isArray(t[0])?t[0].length:void 0,concat:t=>t.flatMap(e=>Array.isArray(e)?e:[e]),reverse:t=>typeof t[0]=="string"?[...t[0]].reverse().join(""):[...Ne(t[0],"reverse")].reverse(),sum:t=>Ne(t[0],"sum").reduce((e,r)=>e+Z(r,"sum"),0),slice:t=>{let r=(typeof t[0]=="string"?[...t[0]]:Ne(t[0],"slice")).slice(Z(t[1]??0,"slice"),t[2]===void 0?void 0:Z(t[2],"slice"));return typeof t[0]=="string"?r.join(""):r},str:t=>t.map(Jt).join(""),chr:t=>t.flatMap(e=>Array.isArray(e)?e:[e]).map(e=>String.fromCodePoint(Z(e,"chr"))).join(""),ord:t=>typeof t[0]=="string"&&t[0].length?t[0].codePointAt(0):void 0,upper:t=>typeof t[0]=="string"?t[0].toUpperCase():void 0,lower:t=>typeof t[0]=="string"?t[0].toLowerCase():void 0,split:t=>typeof t[0]=="string"?t[0].split(typeof t[1]=="string"?t[1]:" "):void 0,join:t=>Ne(t[0],"join").map(Jt).join(typeof t[1]=="string"?t[1]:""),search:t=>{let r=(typeof t[1]=="string"?[...t[1]]:Ne(t[1],"search")).findIndex(n=>ot(n,t[0]));return r<0?void 0:r},contains:t=>typeof t[0]=="string"?t[0].includes(Jt(t[1])):Ne(t[0],"contains").some(e=>ot(e,t[1])),lookup:t=>{let e=Z(t[0],"lookup"),r=Ne(t[1],"lookup");if(!r.length)return;let n=r.map(s=>[Z(s[0],"lookup"),Z(s[1],"lookup")]).sort((s,i)=>s[0]-i[0]);if(e<=n[0][0])return n[0][1];for(let s=1;s<n.length;s++)if(e<=n[s][0]){let[i,o]=n[s-1],[a,u]=n[s];return o+(e-i)/(a-i)*(u-o)}return n[n.length-1][1]},rands:t=>{let e=Z(t[0],"rands"),r=Z(t[1],"rands"),n=Z(t[2],"rands"),s=so(t[3]===void 0?1:Z(t[3],"rands"));return Array.from({length:Math.min(Math.max(0,Math.floor(n)),1e6)},()=>e+(r-e)*s())},is_num:t=>Un(t[0])&&!Number.isNaN(t[0]),is_string:t=>typeof t[0]=="string",is_bool:t=>typeof t[0]=="boolean",is_list:t=>Array.isArray(t[0]),is_undef:t=>t[0]===void 0,is_function:t=>Ze(t[0]),type_of:t=>we(t[0])};var K;(function(t){t[t.NoClip=0]="NoClip",t[t.Intersection=1]="Intersection",t[t.Union=2]="Union",t[t.Difference=3]="Difference",t[t.Xor=4]="Xor"})(K||(K={}));var ve;(function(t){t[t.Subject=0]="Subject",t[t.Clip=1]="Clip"})(ve||(ve={}));var V;(function(t){t[t.EvenOdd=0]="EvenOdd",t[t.NonZero=1]="NonZero",t[t.Positive=2]="Positive",t[t.Negative=3]="Negative"})(V||(V={}));var q;(function(t){t[t.IsOn=0]="IsOn",t[t.IsInside=1]="IsInside",t[t.IsOutside=2]="IsOutside"})(q||(q={}));var mt=Number.MAX_SAFE_INTEGER,ie=Math.floor(Math.sqrt(mt));function Qt(t,e){return!Number.isSafeInteger(t)||!Number.isSafeInteger(e)?!1:t===0||e===0?!0:Math.abs(t)<=mt/Math.abs(e)}function Bn(t,e){return Math.abs(t)+Math.abs(e)<=mt}function Nr(t,e,r,n){if(Qt(t,e)&&Qt(r,n)){let s=t*e,i=r*n;if(Bn(s,i))return s-i}return Number.isSafeInteger(t)&&Number.isSafeInteger(e)&&Number.isSafeInteger(r)&&Number.isSafeInteger(n)?Number(BigInt(t)*BigInt(e)-BigInt(r)*BigInt(n)):t*e-r*n}function Br(t,e,r,n){if(Qt(t,e)&&Qt(r,n)){let s=t*e,i=r*n;if(Bn(s,i))return s+i}return Number.isSafeInteger(t)&&Number.isSafeInteger(e)&&Number.isSafeInteger(r)&&Number.isSafeInteger(n)?Number(BigInt(t)*BigInt(e)+BigInt(r)*BigInt(n)):t*e+r*n}var Gr=BigInt(0),er=BigInt(2),io=BigInt(4),oo=BigInt(64),ao=BigInt("0xFFFFFFFFFFFFFFFF"),Vr=BigInt("9223372036854775807"),Lt=Number(Vr/io),Gn=Number(Vr),Hn=1e-12,uo=.1,Hr=Math.floor(ie/2),lo=Math.floor(Math.sqrt(Math.sqrt(mt/4)));function fo(t){if(!Number.isFinite(t))throw new RangeError("Scale must be a finite number");let e=Math.abs(t);return e===0?Number.POSITIVE_INFINITY:mt/e}function ho(t,e,r){if(!Number.isFinite(t)||Math.abs(t)>e)throw new RangeError(`Scaled coordinate exceeds Number.MAX_SAFE_INTEGER in ${r}`)}function co(t,e){if(!Number.isFinite(t)||Math.abs(t)>mt)throw new RangeError(`Coordinate exceeds Number.MAX_SAFE_INTEGER in ${e}`)}function po(t,e,r){let n=e.x-t.x,s=r.y-e.y,i=e.y-t.y,o=r.x-e.x;return Math.abs(n)<ie&&Math.abs(s)<ie&&Math.abs(i)<ie&&Math.abs(o)<ie?n*s-i*o:Nr(n,s,i,o)}function Ie(t,e,r){let n=e.x-t.x,s=r.y-e.y,i=e.y-t.y,o=r.x-e.x;if(Math.abs(n)<ie&&Math.abs(s)<ie&&Math.abs(i)<ie&&Math.abs(o)<ie){let l=n*s,f=i*o;return l>f?1:l<f?-1:0}if(!Number.isSafeInteger(n)||!Number.isSafeInteger(s)||!Number.isSafeInteger(i)||!Number.isSafeInteger(o)){let l=n*s,f=i*o;return l>f?1:l<f?-1:0}let a=BigInt(n)*BigInt(s),u=BigInt(i)*BigInt(o);return a===u?0:a>u?1:-1}function go(t){if(t<-8||t>8)throw new Error("Error: Precision is out of range.")}function vo(t){return Math.abs(t)<=Hn}function mo(t){return t<0?-1:t>0?1:0}function xo(t,e){let r=BigInt(t),n=BigInt(e),s=r*n;return{lo64:s&ao,hi64:s>>oo}}function zn(t,e,r,n){let s=Math.abs(t),i=Math.abs(e),o=Math.abs(r),a=Math.abs(n);if(s<ie&&i<ie&&o<ie&&a<ie)return t*e===r*n;let u=(t<0?-1:t>0?1:0)*(e<0?-1:e>0?1:0),l=(r<0?-1:r>0?1:0)*(n<0?-1:n>0?1:0);if(u!==l)return!1;if(u===0)return!0;if(!Number.isSafeInteger(s)||!Number.isSafeInteger(i)||!Number.isSafeInteger(o)||!Number.isSafeInteger(a))return t*e===r*n;let f=BigInt(s),c=BigInt(i),h=BigInt(o),p=BigInt(a);return f*c===h*p}function yo(t,e,r){let n=e.x-t.x,s=r.y-e.y,i=e.y-t.y,o=r.x-e.x;return zn(n,s,i,o)}function bo(t,e,r){let n=e.x-t.x,s=r.x-e.x,i=e.y-t.y,o=r.y-e.y;return Math.abs(n)<ie&&Math.abs(s)<ie&&Math.abs(i)<ie&&Math.abs(o)<ie?n*s+i*o:Br(n,s,i,o)}function So(t,e,r){let n=e.x-t.x,s=r.x-e.x,i=e.y-t.y,o=r.y-e.y;if(Math.abs(n)<ie&&Math.abs(s)<ie&&Math.abs(i)<ie&&Math.abs(o)<ie){let u=n*s+i*o;return u>0?1:u<0?-1:0}if(!Number.isSafeInteger(n)||!Number.isSafeInteger(s)||!Number.isSafeInteger(i)||!Number.isSafeInteger(o)){let u=n*s+i*o;return u>0?1:u<0?-1:0}let a=BigInt(n)*BigInt(s)+BigInt(i)*BigInt(o);return a===Gr?0:a>Gr?1:-1}function ko(t){let e=t.length;if(e<3)return 0;let r=!0;for(let i=0;i<e&&r;i++){let o=t[i];(Math.abs(o.x)>=Hr||Math.abs(o.y)>=Hr)&&(r=!1)}let n=t[e-1];if(r){let i=0;for(let o of t)i+=(n.y+o.y)*(n.x-o.x),n=o;return i*.5}let s=Gr;for(let i of t){let o=n.y+i.y,a=n.x-i.x;if(Number.isSafeInteger(o)&&Number.isSafeInteger(a))s+=BigInt(o)*BigInt(a);else if(Number.isSafeInteger(n.y)&&Number.isSafeInteger(i.y)&&Number.isSafeInteger(n.x)&&Number.isSafeInteger(i.x)){let u=BigInt(n.y)+BigInt(i.y),l=BigInt(n.x)-BigInt(i.x);s+=u*l}else s+=BigInt(Math.round(o*a));n=i}return Number(s)*.5}function Eo(t,e){return t.y*e.x-e.y*t.x}function wo(t,e){return t.x*e.x+t.y*e.y}function Po(t){let e=Math.round(t);return t===e-.5&&(e&1)!==0?e-1:e}function Io(t){return t>=Lt||t<=-Lt?Gn:Math.round(t)}function Lo(t,e,r,n){let s=e.y-t.y,i=e.x-t.x,o=n.y-r.y,a=n.x-r.x,u=Nr(s,a,o,i);if(u===0)return null;let l=Nr(t.x-r.x,o,t.y-r.y,a)/u;return l<=0?{x:t.x,y:t.y,z:t.z||0}:l>=1?{x:e.x,y:e.y,z:e.z||0}:{x:Math.trunc(t.x+l*i),y:Math.trunc(t.y+l*s),z:0}}function To(t,e,r,n){let s=e.y-t.y,i=e.x-t.x,o=n.y-r.y,a=n.x-r.x,u=s*a-o*i;if(u===0)return{success:!1,ip:{x:0,y:0,z:0}};let l=((t.x-r.x)*o-(t.y-r.y)*a)/u,f;return l<=0?f={...t,z:0}:l>=1?f={...e,z:0}:f={x:t.x+l*i,y:t.y+l*s,z:0},{success:!0,ip:f}}function Co(t,e,r,n,s=!1){if(!s){let l=Ie(t,r,n),f=Ie(e,r,n),c=Ie(r,t,e),h=Ie(n,t,e);return l!==0&&f!==0&&l!==f&&c!==0&&h!==0&&c!==h}let i=Ie(t,r,n),o=Ie(e,r,n);if(i!==0&&i===o)return!1;let a=Ie(r,t,e),u=Ie(n,t,e);return a!==0&&a===u?!1:i!==0||o!==0||a!==0||u!==0}function Vn(t){if(t.length===0)return{left:0,top:0,right:0,bottom:0};let e={left:Number.MAX_SAFE_INTEGER,top:Number.MAX_SAFE_INTEGER,right:Number.MIN_SAFE_INTEGER,bottom:Number.MIN_SAFE_INTEGER};for(let r of t)r.x<e.left&&(e.left=r.x),r.x>e.right&&(e.right=r.x),r.y<e.top&&(e.top=r.y),r.y>e.bottom&&(e.bottom=r.y);return e.left===Number.MAX_SAFE_INTEGER?{left:0,top:0,right:0,bottom:0}:e}function Mo(t,e,r){if(e.x===r.x&&e.y===r.y)return{x:e.x,y:e.y,z:0};let n=r.x-e.x,s=r.y-e.y,i=Br(t.x-e.x,n,t.y-e.y,s)/Br(n,n,s,s),o=i<0?0:i>1?1:i;return{x:Math.round(e.x+o*n),y:Math.round(e.y+o*s),z:0}}function zr(t,e){let r=e.length,n=0;if(r<3)return q.IsOutside;for(;n<r&&e[n].y===t.y;)n++;if(n===r)return q.IsOutside;let s=e[n].y<t.y,i=s,o=0,a=n+1,u=r;for(;;){if(a===u){if(u===0||n===0)break;u=n,a=0}if(s)for(;a<u&&e[a].y<t.y;)a++;else for(;a<u&&e[a].y>t.y;)a++;if(a===u)continue;let f=e[a],c=a>0?e[a-1]:e[r-1];if(f.y===t.y){if(f.x===t.x||f.y===c.y&&t.x<c.x!=t.x<f.x)return q.IsOn;if(a++,a===n)break;continue}if(!(t.x<f.x&&t.x<c.x))if(t.x>c.x&&t.x>f.x)o=1-o;else{let h=Ie(c,f,t);if(h===0)return q.IsOn;h<0===s&&(o=1-o)}s=!s,a++}if(s===i)return o===0?q.IsOutside:q.IsInside;a===r&&(a=0);let l=a===0?Ie(e[r-1],e[0],t):Ie(e[a-1],e[a],t);return l===0?q.IsOn:(l<0===s&&(o=1-o),o===0?q.IsOutside:q.IsInside)}function Oo(t,e){let r=q.IsOn;for(let a of t)switch(zr(a,e)){case q.IsOutside:if(r===q.IsOutside)return!1;r=q.IsOutside;break;case q.IsInside:if(r===q.IsInside)return!0;r=q.IsInside;break;default:break}let n=Vn(t),s,i;return Number.isSafeInteger(n.left)&&Number.isSafeInteger(n.right)&&Math.abs(n.left)+Math.abs(n.right)>Number.MAX_SAFE_INTEGER?(s=Number((BigInt(n.left)+BigInt(n.right))/er),i=Number((BigInt(n.top)+BigInt(n.bottom))/er)):(s=Math.round((n.left+n.right)/2),i=Math.round((n.top+n.bottom)/2)),zr({x:s,y:i},e)!==q.IsOutside}var H={MaxInt64:Vr,MaxCoord:Lt,max_coord:Lt,min_coord:-Lt,Invalid64:Gn,floatingPointTolerance:Hn,defaultMinimumEdgeLength:uo,maxCoordForSafeAreaProduct:Hr,maxCoordForSafeCrossSq:lo,maxSafeCoordinateForScale:fo,checkSafeScaleValue:ho,ensureSafeInteger:co,crossProduct:po,crossProductSign:Ie,checkPrecision:go,isAlmostZero:vo,triSign:mo,multiplyUInt64:xo,productsAreEqual:zn,isCollinear:yo,dotProduct:bo,dotProductSign:So,area:ko,crossProductD:Eo,dotProductD:wo,roundToEven:Po,checkCastInt64:Io,getLineIntersectPt:Lo,getLineIntersectPtD:To,segsIntersect:Co,getBounds:Vn,getClosestPtOnSegment:Mo,pointInPolygon:zr,path2ContainsPath1:Oo},Be={create(t=0,e=0,r=0){return{x:Math.round(t),y:Math.round(e),z:r}},fromPointD(t){return H.ensureSafeInteger(t.x,"Point64Utils.fromPointD"),H.ensureSafeInteger(t.y,"Point64Utils.fromPointD"),{x:Math.round(t.x),y:Math.round(t.y),z:t.z||0}},scale(t,e){return{x:Math.round(t.x*e),y:Math.round(t.y*e),z:t.z||0}},equals(t,e){return t.x===e.x&&t.y===e.y},add(t,e){if(Number.isSafeInteger(t.x)&&Number.isSafeInteger(e.x)&&Number.isSafeInteger(t.y)&&Number.isSafeInteger(e.y)){let r=t.x+e.x,n=t.y+e.y;return Number.isSafeInteger(r)&&Number.isSafeInteger(n)?{x:r,y:n,z:0}:{x:Number(BigInt(t.x)+BigInt(e.x)),y:Number(BigInt(t.y)+BigInt(e.y)),z:0}}return{x:t.x+e.x,y:t.y+e.y,z:0}},subtract(t,e){return{x:t.x-e.x,y:t.y-e.y,z:0}},toString(t){return t.z!==void 0&&t.z!==0?`${t.x},${t.y},${t.z} `:`${t.x},${t.y} `}},tr={create(t=0,e=0,r=0){return{x:t,y:e,z:r}},fromPoint64(t){return{x:t.x,y:t.y,z:t.z||0}},scale(t,e){return{x:t.x*e,y:t.y*e,z:t.z||0}},equals(t,e){return H.isAlmostZero(t.x-e.x)&&H.isAlmostZero(t.y-e.y)},negate(t){t.x=-t.x,t.y=-t.y},toString(t,e=2){return t.z!==void 0&&t.z!==0?`${t.x.toFixed(e)},${t.y.toFixed(e)},${t.z}`:`${t.x.toFixed(e)},${t.y.toFixed(e)}`}},ut={create(t=0,e=0,r=0,n=0){return{left:t,top:e,right:r,bottom:n}},createInvalid(){return{left:Number.MAX_SAFE_INTEGER,top:Number.MAX_SAFE_INTEGER,right:Number.MIN_SAFE_INTEGER,bottom:Number.MIN_SAFE_INTEGER}},width(t){return t.right-t.left},height(t){return t.bottom-t.top},isEmpty(t){return t.bottom<=t.top||t.right<=t.left},isValid(t){return t.left<Number.MAX_SAFE_INTEGER},midPoint(t){if(Number.isSafeInteger(t.left)&&Number.isSafeInteger(t.right)&&Math.abs(t.left)+Math.abs(t.right)>Number.MAX_SAFE_INTEGER){let e=Number((BigInt(t.left)+BigInt(t.right))/er),r=Number((BigInt(t.top)+BigInt(t.bottom))/er);return{x:e,y:r}}return{x:Math.round((t.left+t.right)/2),y:Math.round((t.top+t.bottom)/2)}},contains(t,e){return e.x>t.left&&e.x<t.right&&e.y>t.top&&e.y<t.bottom},containsRect(t,e){return e.left>=t.left&&e.right<=t.right&&e.top>=t.top&&e.bottom<=t.bottom},intersects(t,e){return Math.max(t.left,e.left)<=Math.min(t.right,e.right)&&Math.max(t.top,e.top)<=Math.min(t.bottom,e.bottom)},asPath(t){return[{x:t.left,y:t.top,z:0},{x:t.right,y:t.top,z:0},{x:t.right,y:t.bottom,z:0},{x:t.left,y:t.bottom,z:0}]}},Xr={create(t=0,e=0,r=0,n=0){return{left:t,top:e,right:r,bottom:n}},createInvalid(){return{left:Number.MAX_VALUE,top:Number.MAX_VALUE,right:-Number.MAX_VALUE,bottom:-Number.MAX_VALUE}},width(t){return t.right-t.left},height(t){return t.bottom-t.top},isEmpty(t){return t.bottom<=t.top||t.right<=t.left},midPoint(t){return{x:(t.left+t.right)/2,y:(t.top+t.bottom)/2}},contains(t,e){return e.x>t.left&&e.x<t.right&&e.y>t.top&&e.y<t.bottom},containsRect(t,e){return e.left>=t.left&&e.right<=t.right&&e.top>=t.top&&e.bottom<=t.bottom},intersects(t,e){return Math.max(t.left,e.left)<Math.min(t.right,e.right)&&Math.max(t.top,e.top)<Math.min(t.bottom,e.bottom)},asPath(t){return[{x:t.left,y:t.top,z:0},{x:t.right,y:t.top,z:0},{x:t.right,y:t.bottom,z:0},{x:t.left,y:t.bottom,z:0}]}};var Xn=Object.freeze(ut.createInvalid()),qn=Object.freeze(Xr.createInvalid());var Tt=BigInt(0),Fo=BigInt(2),Wn=BigInt(4),Y;(function(t){t[t.None=0]="None",t[t.OpenStart=1]="OpenStart",t[t.OpenEnd=2]="OpenEnd",t[t.LocalMax=4]="LocalMax",t[t.LocalMin=8]="LocalMin"})(Y||(Y={}));var qr=class{constructor(){y(this,"data",[])}push(e){this.data.push(e),this.siftUp(this.data.length-1)}pop(){if(this.data.length===0)return null;let e=this.data[0],r=this.data.pop();return this.data.length>0&&(this.data[0]=r,this.siftDown(0)),e}clear(){this.data.length=0}siftUp(e){let r=this.data[e];for(;e>0;){let n=e-1>>1;if(this.data[n]>=r)break;this.data[e]=this.data[n],e=n}this.data[e]=r}siftDown(e){let r=this.data.length,n=this.data[e];for(;;){let s=(e<<1)+1;if(s>=r)break;let i=s+1,o=s;if(i<r&&this.data[i]>this.data[s]&&(o=i),this.data[o]<=n)break;this.data[e]=this.data[o],e=o}this.data[e]=n}},Ct=class{constructor(e,r,n){y(this,"pt");y(this,"next",null);y(this,"prev",null);y(this,"flags");this.pt=e,this.flags=r,this.prev=n}},Mt=class{constructor(e,r,n=!1){y(this,"vertex");y(this,"polytype");y(this,"isOpen");this.vertex=e,this.polytype=r,this.isOpen=n}equals(e){return e!==null&&this.vertex===e.vertex}};function $n(t,e,r){return{pt:t,edge1:e,edge2:r}}var Xe=class{constructor(e,r){y(this,"pt");y(this,"next");y(this,"prev");y(this,"outrec");y(this,"horz");this.pt=e,this.outrec=r,this.next=this,this.prev=this,this.horz=null}},xe;(function(t){t[t.None=0]="None",t[t.Left=1]="Left",t[t.Right=2]="Right"})(xe||(xe={}));var Wr;(function(t){t[t.Bottom=0]="Bottom",t[t.Middle=1]="Middle",t[t.Top=2]="Top"})(Wr||(Wr={}));var rr=class{constructor(){y(this,"idx",0);y(this,"owner",null);y(this,"frontEdge",null);y(this,"backEdge",null);y(this,"pts",null);y(this,"polypath",null);y(this,"bounds",{left:0,top:0,right:0,bottom:0});y(this,"path",[]);y(this,"isOpen",!1);y(this,"splits",null);y(this,"recursiveSplit",null)}},nr=class{constructor(e){y(this,"leftOp");y(this,"rightOp");y(this,"leftToRight");this.leftOp=e,this.rightOp=null,this.leftToRight=!0}},Ot=class{constructor(e,r){y(this,"op1");y(this,"op2");this.op1=e,this.op2=r}};function Ao(t,e){return t.rightOp===null?e.rightOp===null?0:1:e.rightOp===null?-1:t.leftOp.pt.x-e.leftOp.pt.x}function Do(t,e){return t.pt.y!==e.pt.y?t.pt.y>e.pt.y?-1:1:t.pt.x!==e.pt.x?t.pt.x<e.pt.x?-1:1:t.edge1.curX!==e.edge1.curX?t.edge1.curX<e.edge1.curX?-1:1:t.edge2.curX<e.edge2.curX?-1:t.edge2.curX>e.edge2.curX?1:0}var Ft=class{constructor(){y(this,"bot",{x:0,y:0});y(this,"top",{x:0,y:0});y(this,"curX",0);y(this,"dx",0);y(this,"windDx",0);y(this,"windCount",0);y(this,"windCount2",0);y(this,"outrec",null);y(this,"prevInAEL",null);y(this,"nextInAEL",null);y(this,"prevInSEL",null);y(this,"nextInSEL",null);y(this,"jump",null);y(this,"vertexTop",null);y(this,"localMin",null);y(this,"isLeftBound",!1);y(this,"joinWith",xe.None)}},xt={addLocMin(t,e,r,n){if((t.flags&Y.LocalMin)!==Y.None)return;t.flags|=Y.LocalMin;let s=new Mt(t,e,r);n.push(s)},addPathsToVertexList(t,e,r,n,s){for(let i=0,o=t.length;i<o;i++){let a=t[i],u=null,l=null,f=null;for(let d=0,x=a.length;d<x;d++){let m=a[d];if(u===null)u=new Ct(m,Y.None,null),s.push(u),l=u,f=m;else if(!(f.x===m.x&&f.y===m.y)){let b=new Ct(m,Y.None,l);l.next=b,l=b,f=m}}if(l?.prev==null||(!r&&l.pt.x===u.pt.x&&l.pt.y===u.pt.y&&(l=l.prev),l.next=u,u.prev=l,!r&&l.next===l))continue;let c;if(r){let d=u.next;for(;d!==u&&d.pt.y===u.pt.y;)d=d.next;c=d.pt.y<=u.pt.y,c?(u.flags=Y.OpenStart,xt.addLocMin(u,e,!0,n)):u.flags=Y.OpenStart|Y.LocalMax}else{for(l=u.prev;l!==u&&l.pt.y===u.pt.y;)l=l.prev;if(l===u)continue;c=l.pt.y>u.pt.y}let h=c;l=u;let p=u.next;for(;p!==u;)p.pt.y>l.pt.y&&c?(l.flags|=Y.LocalMax,c=!1):p.pt.y<l.pt.y&&!c&&(c=!0,xt.addLocMin(l,e,r,n)),l=p,p=p.next;r?(l.flags|=Y.OpenEnd,c?l.flags|=Y.LocalMax:xt.addLocMin(l,e,r,n)):c!==h&&(h?xt.addLocMin(l,e,!1,n):l.flags|=Y.LocalMax)}}};var sr=class{constructor(e=null){y(this,"parent");y(this,"children",[]);this.parent=e}get isHole(){return this.getIsHole()}getLevel(){let e=0,r=this.parent;for(;r!==null;)++e,r=r.parent;return e}get level(){return this.getLevel()}getIsHole(){let e=this.getLevel();return e!==0&&(e&1)===0}get count(){return this.children.length}clear(){this.children.length=0}toStringInternal(e,r){let n="",s=" ".repeat(r),i=this.children.length===1?"":"s";(r&1)===0?n+=`${s}+- hole (${e}) contains ${this.children.length} nested polygon${i}.
3
+ `:n+=`${s}+- polygon (${e}) contains ${this.children.length} hole${i}.
4
+ `;for(let o=0;o<this.count;o++)this.children[o].count>0&&(n+=this.children[o].toStringInternal(o,r+1));return n}toString(){if(this.level>0)return"";let e=this.children.length===1?"":"s",r=`Polytree with ${this.children.length} polygon${e}.
5
+ `;for(let n=0;n<this.count;n++)this.children[n].count>0&&(r+=this.children[n].toStringInternal(n,1));return r+`
6
+ `}},ir=class t extends sr{constructor(r=null){super(r);y(this,"polygon",null)}get poly(){return this.polygon}addChild(r){let n=new t(this);return n.polygon=r,this.children.push(n),n}child(r){if(r<0||r>=this.children.length)throw new Error("Index out of range");return this.children[r]}area(){let r=this.polygon===null?0:$r.area(this.polygon);for(let n of this.children)r+=n.area();return r}};var At=class extends ir{};var g=class g{constructor(){y(this,"cliptype",K.NoClip);y(this,"fillrule",V.EvenOdd);y(this,"actives",null);y(this,"sel",null);y(this,"minimaList",[]);y(this,"intersectList",[]);y(this,"vertexList",[]);y(this,"outrecList",[]);y(this,"scanlineHeap",new qr);y(this,"scanlineSet",new Set);y(this,"scanlineArr",[]);y(this,"useScanlineArray",!1);y(this,"horzSegList",[]);y(this,"horzJoinList",[]);y(this,"currentLocMin",0);y(this,"currentBotY",0);y(this,"curXValidAtTop",!1);y(this,"isSortedMinimaList",!1);y(this,"hasOpenPaths",!1);y(this,"usingPolytree",!1);y(this,"succeeded",!1);y(this,"zCallbackInternal");y(this,"preserveCollinear",!0);y(this,"reverseSolution",!1)}getZCallback(){}xyEqual(e,r){return e.x===r.x&&e.y===r.y}setZ(e,r,n){let s=this.zCallbackInternal;s&&(g.getPolyType(e)===ve.Subject?(this.xyEqual(n,e.bot)?n.z=e.bot.z??0:this.xyEqual(n,e.top)?n.z=e.top.z??0:this.xyEqual(n,r.bot)?n.z=r.bot.z??0:this.xyEqual(n,r.top)?n.z=r.top.z??0:n.z=0,s(e.bot,e.top,r.bot,r.top,n)):(this.xyEqual(n,r.bot)?n.z=r.bot.z??0:this.xyEqual(n,r.top)?n.z=r.top.z??0:this.xyEqual(n,e.bot)?n.z=e.bot.z??0:this.xyEqual(n,e.top)?n.z=e.top.z??0:n.z=0,s(r.bot,r.top,e.bot,e.top,n)))}static isOdd(e){return(e&1)!==0}static isHotEdge(e){return e.outrec!=null}static isOpen(e){return g.openPathsEnabled&&e.localMin.isOpen}static isOpenEnd(e){return g.openPathsEnabled&&e.localMin.isOpen&&g.isOpenEndVertex(e.vertexTop)}static isOpenEndVertex(e){return(e.flags&(Y.OpenStart|Y.OpenEnd))!==Y.None}static getPrevHotEdge(e){let r=e.prevInAEL;if(!g.openPathsEnabled){for(;r!==null&&!g.isHotEdge(r);)r=r.prevInAEL;return r}for(;r!==null&&(r.localMin.isOpen||!g.isHotEdge(r));)r=r.prevInAEL;return r}static isFront(e){return e===e.outrec.frontEdge}static getDx(e,r){let n=r.y-e.y;return n!==0?(r.x-e.x)/n:r.x>e.x?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY}static topX(e,r){return r===e.top.y||e.top.x===e.bot.x?e.top.x:r===e.bot.y?e.bot.x:H.roundToEven(e.bot.x+e.dx*(r-e.bot.y))}static isHorizontal(e){return e.dx===Number.NEGATIVE_INFINITY||e.dx===Number.POSITIVE_INFINITY}static isHeadingRightHorz(e){return e.dx===Number.NEGATIVE_INFINITY}static isHeadingLeftHorz(e){return e.dx===Number.POSITIVE_INFINITY}static getPolyType(e){return e.localMin.polytype}static isSamePolyType(e,r){return e.localMin.polytype===r.localMin.polytype}static setDx(e){e.dx=g.getDx(e.bot,e.top)}static nextVertex(e){return e.windDx>0?e.vertexTop.next:e.vertexTop.prev}static prevPrevVertex(e){return e.windDx>0?e.vertexTop.prev.prev:e.vertexTop.next.next}static isMaximaVertex(e){return(e.flags&Y.LocalMax)!==Y.None}static isMaximaEdge(e){return(e.vertexTop.flags&Y.LocalMax)!==Y.None}static getMaximaPair(e){let r=e.nextInAEL;for(;r!==null;){if(r.vertexTop===e.vertexTop)return r;r=r.nextInAEL}return null}boundingBoxesOverlap(e,r,n,s){let i=e.x<r.x?e.x:r.x;if((n.x>s.x?n.x:s.x)<i)return!1;let a=e.x>r.x?e.x:r.x,u=n.x<s.x?n.x:s.x;if(a<u)return!1;let l=e.y<r.y?e.y:r.y;if((n.y>s.y?n.y:s.y)<l)return!1;let c=e.y>r.y?e.y:r.y,h=n.y<s.y?n.y:s.y;return c>=h}clearSolutionOnly(){for(;this.actives!==null;)this.deleteFromAEL(this.actives);this.scanlineHeap.clear(),this.scanlineSet.clear(),this.scanlineArr.length=0,this.disposeIntersectNodes(),this.outrecList.length=0,this.horzSegList.length=0,this.horzJoinList.length=0}clear(){this.clearSolutionOnly(),this.minimaList.length=0,this.vertexList.length=0,this.currentLocMin=0,this.isSortedMinimaList=!1,this.hasOpenPaths=!1}reset(){this.isSortedMinimaList||(this.minimaList.sort((e,r)=>r.vertex.pt.y-e.vertex.pt.y),this.isSortedMinimaList=!0),this.scanlineHeap.clear(),this.scanlineSet.clear(),this.scanlineArr.length=0,this.useScanlineArray=this.minimaList.length<=16;for(let e=this.minimaList.length-1;e>=0;e--)this.insertScanline(this.minimaList[e].vertex.pt.y);this.currentBotY=0,this.currentLocMin=0,this.actives=null,this.sel=null,this.curXValidAtTop=!1,this.succeeded=!0}upgradeScanlineStructureFromArray(){let e=this.scanlineArr;for(let r=0,n=e.length;r<n;r++){let s=e[r];this.scanlineSet.add(s),this.scanlineHeap.push(s)}e.length=0,this.useScanlineArray=!1}insertScanline(e){if(this.useScanlineArray){let r=this.scanlineArr;for(let n=0,s=r.length;n<s;n++)if(r[n]===e)return;r.push(e),r.length>64&&this.upgradeScanlineStructureFromArray();return}this.scanlineSet.has(e)||(this.scanlineSet.add(e),this.scanlineHeap.push(e))}popScanline(){if(this.useScanlineArray){let r=this.scanlineArr,n=r.length;if(n===0)return null;let s=0,i=r[0];for(let o=1;o<n;o++){let a=r[o];a>i&&(i=a,s=o)}return r[s]=r[n-1],r.pop(),i}let e=this.scanlineHeap.pop();return e===null?null:(this.scanlineSet.delete(e),e)}hasLocMinAtY(e){return this.currentLocMin<this.minimaList.length&&this.minimaList[this.currentLocMin].vertex.pt.y===e}popLocalMinima(){return this.minimaList[this.currentLocMin++]}addPath(e,r,n=!1){let s=[e];this.addPaths(s,r,n)}addPaths(e,r,n=!1){n&&(this.hasOpenPaths=!0),this.isSortedMinimaList=!1,xt.addPathsToVertexList(e,r,n,this.minimaList,this.vertexList)}addReuseableData(e){if(e.minimaList.length!==0){this.isSortedMinimaList=!1;for(let r of e.minimaList)this.minimaList.push(new Mt(r.vertex,r.polytype,r.isOpen)),r.isOpen&&(this.hasOpenPaths=!0)}}deleteFromAEL(e){let r=e.prevInAEL,n=e.nextInAEL;r===null&&n===null&&e!==this.actives||(r!==null?r.nextInAEL=n:this.actives=n,n!==null&&(n.prevInAEL=r))}getBounds(){let e={left:Number.MAX_SAFE_INTEGER,top:Number.MAX_SAFE_INTEGER,right:Number.MIN_SAFE_INTEGER,bottom:Number.MIN_SAFE_INTEGER};for(let r of this.vertexList){let n=r;do n.pt.x<e.left&&(e.left=n.pt.x),n.pt.x>e.right&&(e.right=n.pt.x),n.pt.y<e.top&&(e.top=n.pt.y),n.pt.y>e.bottom&&(e.bottom=n.pt.y),n=n.next;while(n!==r)}return ut.isEmpty(e)?{left:0,top:0,right:0,bottom:0}:e}executeInternal(e,r){if(e===K.NoClip)return;g.openPathsEnabled=this.hasOpenPaths,this.zCallbackInternal=this.getZCallback(),this.fillrule=r,this.cliptype=e,this.reset();let n=this.popScanline();if(n!==null){for(;this.succeeded;){this.insertLocalMinimaIntoAEL(n);let s;for(;(s=this.popHorz())!==null;)this.doHorizontal(s);this.horzSegList.length>0&&(this.convertHorzSegsToJoins(),this.horzSegList.length=0),this.currentBotY=n;let i=this.popScanline();if(i===null)break;for(n=i,this.doIntersections(n),this.doTopOfScanbeam(n);(s=this.popHorz())!==null;)this.doHorizontal(s)}this.succeeded&&this.processHorzJoins()}}insertLocalMinimaIntoAEL(e){for(;this.hasLocMinAtY(e);){let r=this.popLocalMinima(),n;(r.vertex.flags&Y.OpenStart)!==Y.None?n=null:(n=new Ft,n.bot=r.vertex.pt,n.curX=r.vertex.pt.x,n.windDx=-1,n.vertexTop=r.vertex.prev,n.top=r.vertex.prev.pt,n.outrec=null,n.localMin=r,g.setDx(n));let s;if((r.vertex.flags&Y.OpenEnd)!==Y.None?s=null:(s=new Ft,s.bot=r.vertex.pt,s.curX=r.vertex.pt.x,s.windDx=1,s.vertexTop=r.vertex.next,s.top=r.vertex.next.pt,s.outrec=null,s.localMin=r,g.setDx(s)),n!==null&&s!==null){if(g.isHorizontal(n)){if(g.isHeadingRightHorz(n)){let o=n;n=s,s=o}}else if(g.isHorizontal(s)){if(g.isHeadingLeftHorz(s)){let o=n;n=s,s=o}}else if(n.dx<s.dx){let o=n;n=s,s=o}}else n===null&&(n=s,s=null);let i;if(n.isLeftBound=!0,this.insertLeftEdge(n),g.openPathsEnabled?g.isOpen(n)?(this.setWindCountForOpenPathEdge(n),i=this.isContributingOpen(n)):(this.setWindCountForClosedPathEdge(n),i=this.isContributingClosed(n)):(this.setWindCountForClosedPathEdge(n),i=this.isContributingClosed(n)),s!==null){for(s.windCount=n.windCount,s.windCount2=n.windCount2,this.insertRightEdge(n,s),i&&(this.addLocalMinPoly(n,s,n.bot,!0),g.isHorizontal(n)||this.checkJoinLeft(n,n.bot));s.nextInAEL!==null&&this.isValidAelOrder(s.nextInAEL,s);)this.intersectEdges(s,s.nextInAEL,s.bot),this.swapPositionsInAEL(s,s.nextInAEL);g.isHorizontal(s)?this.pushHorz(s):(this.checkJoinRight(s,s.bot),this.insertScanline(s.top.y))}else i&&g.openPathsEnabled&&this.startOpenPath(n,n.bot);g.isHorizontal(n)?this.pushHorz(n):this.insertScanline(n.top.y)}}pushHorz(e){e.nextInSEL=this.sel,this.sel=e}popHorz(){let e=this.sel;return e===null?null:(this.sel=this.sel.nextInSEL,e)}doHorizontal(e){if(!g.openPathsEnabled){this.doHorizontalClosed(e);return}let r=g.isOpen(e),n=e.bot.y,s=r?this.getCurrYMaximaVertexOpen(e):this.getCurrYMaximaVertex(e),{isLeftToRight:i,leftX:o,rightX:a}=this.resetHorzDirection(e,s),u=o,l=a;if(g.isHotEdge(e)){let f=this.addOutPt(e,{x:e.curX,y:n});this.addToHorzSegList(f)}for(;;){let f=i?e.nextInAEL:e.prevInAEL;for(;f!==null;){if(f.vertexTop===s){if(g.isHotEdge(e)&&this.isJoined(f)&&this.split(f,f.top),g.isHotEdge(e)){for(;e.vertexTop!==s;)this.addOutPt(e,e.top),this.updateEdgeIntoAEL(e);i?this.addLocalMaxPoly(e,f,e.top):this.addLocalMaxPoly(f,e,e.top)}this.deleteFromAEL(f),this.deleteFromAEL(e);return}if(s!==e.vertexTop||g.isOpenEnd(e)){if(i&&f.curX>l||!i&&f.curX<u)break;if(f.curX===e.top.x&&!g.isHorizontal(f)){let p=g.nextVertex(e).pt;if(g.isOpen(f)&&!g.isSamePolyType(f,e)&&!g.isHotEdge(f)){if(i&&g.topX(f,p.y)>p.x||!i&&g.topX(f,p.y)<p.x)break}else if(i&&g.topX(f,p.y)>=p.x||!i&&g.topX(f,p.y)<=p.x)break}}let h={x:f.curX,y:n};i?(this.intersectEdges(e,f,h),this.swapPositionsInAEL(e,f),this.checkJoinLeft(f,h),e.curX=f.curX,f=e.nextInAEL):(this.intersectEdges(f,e,h),this.swapPositionsInAEL(f,e),this.checkJoinRight(f,h),e.curX=f.curX,f=e.prevInAEL),g.isHotEdge(e)&&this.addToHorzSegList(this.getLastOp(e))}if(r&&g.isOpenEnd(e)){g.isHotEdge(e)&&(this.addOutPt(e,e.top),g.isFront(e)?e.outrec.frontEdge=null:e.outrec.backEdge=null,e.outrec=null),this.deleteFromAEL(e);return}if(g.nextVertex(e).pt.y!==e.top.y)break;g.isHotEdge(e)&&this.addOutPt(e,e.top),this.updateEdgeIntoAEL(e);let c=this.resetHorzDirection(e,s);u=c.leftX,l=c.rightX}if(g.isHotEdge(e)){let f=this.addOutPt(e,e.top);this.addToHorzSegList(f)}this.updateEdgeIntoAEL(e)}doHorizontalClosed(e){let r=e.bot.y,n=this.getCurrYMaximaVertex(e),{isLeftToRight:s,leftX:i,rightX:o}=this.resetHorzDirection(e,n),a=i,u=o;if(g.isHotEdge(e)){let l=this.addOutPt(e,{x:e.curX,y:r});this.addToHorzSegList(l)}for(;;){let l=s?e.nextInAEL:e.prevInAEL;for(;l!==null;){if(l.vertexTop===n){if(g.isHotEdge(e)&&this.isJoined(l)&&this.split(l,l.top),g.isHotEdge(e)){for(;e.vertexTop!==n;)this.addOutPt(e,e.top),this.updateEdgeIntoAEL(e);s?this.addLocalMaxPoly(e,l,e.top):this.addLocalMaxPoly(l,e,e.top)}this.deleteFromAEL(l),this.deleteFromAEL(e);return}if(n!==e.vertexTop){if(s&&l.curX>u||!s&&l.curX<a)break;if(l.curX===e.top.x&&!g.isHorizontal(l)){let h=g.nextVertex(e).pt,p=g.topX(l,h.y);if(s&&p>=h.x||!s&&p<=h.x)break}}let c={x:l.curX,y:r};s?(this.intersectEdges(e,l,c),this.swapPositionsInAEL(e,l),this.checkJoinLeft(l,c),e.curX=l.curX,l=e.nextInAEL):(this.intersectEdges(l,e,c),this.swapPositionsInAEL(l,e),this.checkJoinRight(l,c),e.curX=l.curX,l=e.prevInAEL),g.isHotEdge(e)&&this.addToHorzSegList(this.getLastOp(e))}if(g.nextVertex(e).pt.y!==e.top.y)break;g.isHotEdge(e)&&this.addOutPt(e,e.top),this.updateEdgeIntoAEL(e);let f=this.resetHorzDirection(e,n);a=f.leftX,u=f.rightX}if(g.isHotEdge(e)){let l=this.addOutPt(e,e.top);this.addToHorzSegList(l)}this.updateEdgeIntoAEL(e)}convertHorzSegsToJoins(){let e=this.horzSegList,r=0;for(let n=0,s=e.length;n<s;n++){let i=e[n];this.updateHorzSegment(i)&&(e[r++]=i)}if(!(r<2)){e.length=r,this.horzSegList.sort(Ao);for(let n=0;n<r-1;n++){let s=this.horzSegList[n];for(let i=n+1;i<r;i++){let o=this.horzSegList[i];if(o.leftOp.pt.x>=s.rightOp.pt.x||o.leftToRight===s.leftToRight||o.rightOp.pt.x<=s.leftOp.pt.x)continue;let a=s.leftOp.pt.y;if(s.leftToRight){for(;s.leftOp.next.pt.y===a&&s.leftOp.next.pt.x<=o.leftOp.pt.x;)s.leftOp=s.leftOp.next;for(;o.leftOp.prev.pt.y===a&&o.leftOp.prev.pt.x<=s.leftOp.pt.x;)o.leftOp=o.leftOp.prev;let u=new Ot(this.duplicateOp(s.leftOp,!0),this.duplicateOp(o.leftOp,!1));this.horzJoinList.push(u)}else{for(;s.leftOp.prev.pt.y===a&&s.leftOp.prev.pt.x<=o.leftOp.pt.x;)s.leftOp=s.leftOp.prev;for(;o.leftOp.next.pt.y===a&&o.leftOp.next.pt.x<=s.leftOp.pt.x;)o.leftOp=o.leftOp.next;let u=new Ot(this.duplicateOp(o.leftOp,!0),this.duplicateOp(s.leftOp,!1));this.horzJoinList.push(u)}}}}}updateHorzSegment(e){let r=e.leftOp,n=this.getRealOutRec(r.outrec),s=n.frontEdge!==null,i=r.pt.y,o=r,a=r;if(s){let l=n.pts,f=l.next;for(;o!==f&&o.prev.pt.y===i;)o=o.prev;for(;a!==l&&a.next.pt.y===i;)a=a.next}else{for(;o.prev!==a&&o.prev.pt.y===i;)o=o.prev;for(;a.next!==o&&a.next.pt.y===i;)a=a.next}let u=this.setHorzSegHeadingForward(e,o,a)&&e.leftOp.horz===null;return u?e.leftOp.horz=e:e.rightOp=null,u}setHorzSegHeadingForward(e,r,n){return r.pt.x===n.pt.x?!1:(r.pt.x<n.pt.x?(e.leftOp=r,e.rightOp=n,e.leftToRight=!0):(e.leftOp=n,e.rightOp=r,e.leftToRight=!1),!0)}duplicateOp(e,r){let n=new Xe(e.pt,e.outrec);return r?(n.next=e.next,n.next.prev=n,n.prev=e,e.next=n):(n.prev=e.prev,n.prev.next=n,n.next=e,e.prev=n),n}getRealOutRec(e){for(;e!==null&&e.pts===null;)e=e.owner;return e}doIntersections(e){this.buildIntersectList(e)&&(this.processIntersectList(),this.disposeIntersectNodes())}doTopOfScanbeam(e){let r=this.curXValidAtTop;this.curXValidAtTop=!1,this.sel=null;let n=this.actives;for(;n!==null;){if(n.top.y===e)if(n.curX=n.top.x,g.isMaximaEdge(n)){n=this.doMaxima(n);continue}else g.isHotEdge(n)&&this.addOutPt(n,n.top),this.updateEdgeIntoAEL(n),g.isHorizontal(n)&&this.pushHorz(n);else r||(n.curX=g.topX(n,e));n=n.nextInAEL}}processHorzJoins(){for(let e of this.horzJoinList){let r=this.getRealOutRec(e.op1.outrec),n=this.getRealOutRec(e.op2.outrec),s=e.op1.next,i=e.op2.prev;if(e.op1.next=e.op2,e.op2.prev=e.op1,s.prev=i,i.next=s,r===n){let o=this.newOutRec();o.pts=s,this.fixOutRecPts(o),r.pts.outrec===o&&(r.pts=e.op1,r.pts.outrec=r),this.usingPolytree?(this.path1InsidePath2(r.pts,o.pts)?([o.pts,r.pts]=[r.pts,o.pts],this.fixOutRecPts(r),this.fixOutRecPts(o),o.owner=r):this.path1InsidePath2(o.pts,r.pts)?o.owner=r:o.owner=r.owner,r.splits===null&&(r.splits=[]),r.splits.push(o.idx)):o.owner=r}else n.pts=null,this.usingPolytree?(this.setOwner(n,r),this.moveSplits(n,r)):n.owner=r}}fixOutRecPts(e){let r=e.pts;do r.outrec=e,r=r.next;while(r!==e.pts)}path1InsidePath2(e,r){let n=q.IsOn,s=e;do{switch(this.pointInOpPolygon(s.pt,r)){case q.IsOutside:if(n===q.IsOutside)return!1;n=q.IsOutside;break;case q.IsInside:if(n===q.IsInside)return!0;n=q.IsInside;break;default:break}s=s.next}while(s!==e);return H.path2ContainsPath1(this.getCleanPath(e),this.getCleanPath(r))}pointInOpPolygon(e,r){if(r===r.next||r.prev===r.next)return q.IsOutside;let n=r;do{if(r.pt.y!==e.y)break;r=r.next}while(r!==n);if(r.pt.y===e.y)return q.IsOutside;let s=r.pt.y<e.y,i=s,o=0;for(n=r.next;n!==r;){if(s)for(;n!==r&&n.pt.y<e.y;)n=n.next;else for(;n!==r&&n.pt.y>e.y;)n=n.next;if(n===r)break;if(n.pt.y===e.y){if(n.pt.x===e.x||n.pt.y===n.prev.pt.y&&e.x<n.prev.pt.x!=e.x<n.pt.x)return q.IsOn;if(n=n.next,n===r)break;continue}if(n.pt.x<=e.x||n.prev.pt.x<=e.x)if(n.prev.pt.x<e.x&&n.pt.x<e.x)o=1-o;else{let a=H.crossProductSign(n.prev.pt,n.pt,e);if(a===0)return q.IsOn;a<0===s&&(o=1-o)}s=!s,n=n.next}if(s===i)return o===0?q.IsOutside:q.IsInside;{let a=H.crossProductSign(n.prev.pt,n.pt,e);if(a===0)return q.IsOn;a<0===s&&(o=1-o)}return o===0?q.IsOutside:q.IsInside}getCleanPath(e){let r=[],n=e;for(;n.next!==e&&(n.pt.x===n.next.pt.x&&n.pt.x===n.prev.pt.x||n.pt.y===n.next.pt.y&&n.pt.y===n.prev.pt.y);)n=n.next;r.push(n.pt);let s=n;for(n=n.next;n!==e;)(n.pt.x!==n.next.pt.x||n.pt.x!==s.pt.x)&&(n.pt.y!==n.next.pt.y||n.pt.y!==s.pt.y)&&(r.push(n.pt),s=n),n=n.next;return r}moveSplits(e,r){if(e.splits!==null){r.splits===null&&(r.splits=[]);for(let n of e.splits)n!==r.idx&&r.splits.push(n);e.splits=null}}buildIntersectList(e){if(this.actives?.nextInAEL===null)return!1;if(!this.adjustCurrXAndCopyToSEL(e))return this.curXValidAtTop=!0,!1;let r=this.sel;for(;r!==null&&r.jump!==null;){let n=null;for(;r!==null&&r.jump!==null;){let s=r,i=r.jump,o=i,a=i?.jump||null;for(r.jump=a;r!==o&&i!==a;)if(i.curX<r.curX){let u=i.prevInSEL;for(;this.addNewIntersectNode(u,i,e),u!==r;)u=u.prevInSEL;if(u=i,i=this.extractFromSEL(u),o=i,r!==null&&this.insert1Before2InSEL(u,r),r!==s)continue;s=u,s.jump=a,n===null?this.sel=s:n.jump=s}else r=r.nextInSEL;n=s,r=a}r=this.sel}return this.intersectList.length>0}processIntersectList(){this.intersectList.sort(Do);for(let e=0;e<this.intersectList.length;++e){if(!this.edgesAdjacentInAEL(this.intersectList[e])){let n=e+1;for(;!this.edgesAdjacentInAEL(this.intersectList[n]);)n++;[this.intersectList[n],this.intersectList[e]]=[this.intersectList[e],this.intersectList[n]]}let r=this.intersectList[e];this.intersectEdges(r.edge1,r.edge2,r.pt),this.swapPositionsInAEL(r.edge1,r.edge2),r.edge1.curX=r.pt.x,r.edge2.curX=r.pt.x,this.checkJoinLeft(r.edge2,r.pt,!0),this.checkJoinRight(r.edge1,r.pt,!0)}}edgesAdjacentInAEL(e){return e.edge1.nextInAEL===e.edge2||e.edge1.prevInAEL===e.edge2}adjustCurrXAndCopyToSEL(e){let r=this.actives;this.sel=r;let n=Number.NEGATIVE_INFINITY,s=!1;for(;r!==null;){r.prevInSEL=r.prevInAEL,r.nextInSEL=r.nextInAEL,r.jump=r.nextInSEL;let i=g.topX(r,e);r.curX=i,i<n&&(s=!0),n=i,r=r.nextInAEL}return s}doMaxima(e){let r=e.prevInAEL,n=e.nextInAEL;if(g.isOpenEnd(e))return g.isHotEdge(e)&&this.addOutPt(e,e.top),g.isHorizontal(e)||(g.isHotEdge(e)&&(g.isFront(e)?e.outrec.frontEdge=null:e.outrec.backEdge=null,e.outrec=null),this.deleteFromAEL(e)),n;let s=g.getMaximaPair(e);if(s===null)return n;for(this.isJoined(e)&&this.split(e,e.top),this.isJoined(s)&&this.split(s,s.top);n!==s;)this.intersectEdges(e,n,e.top),this.swapPositionsInAEL(e,n),n=e.nextInAEL;return g.isOpen(e)?(g.isHotEdge(e)&&this.addLocalMaxPoly(e,s,e.top),this.deleteFromAEL(s),this.deleteFromAEL(e),r!==null?r.nextInAEL:this.actives):(g.isHotEdge(e)&&this.addLocalMaxPoly(e,s,e.top),this.deleteFromAEL(e),this.deleteFromAEL(s),r!==null?r.nextInAEL:this.actives)}updateEdgeIntoAEL(e){if(e.bot=e.top,e.vertexTop=g.nextVertex(e),e.top=e.vertexTop.pt,e.curX=e.bot.x,g.setDx(e),this.isJoined(e)&&this.split(e,e.bot),g.isHorizontal(e)){g.openPathsEnabled?g.isOpen(e)||this.trimHorz(e,this.preserveCollinear):this.trimHorz(e,this.preserveCollinear);return}this.insertScanline(e.top.y),this.checkJoinLeft(e,e.bot),this.checkJoinRight(e,e.bot,!0)}trimHorz(e,r){let n=!1,s=g.nextVertex(e).pt;for(;s.y===e.top.y&&!(r&&s.x<e.top.x!=e.bot.x<e.top.x||(e.vertexTop=g.nextVertex(e),e.top=s,n=!0,g.isMaximaVertex(e.vertexTop)));)s=g.nextVertex(e).pt;n&&g.setDx(e)}addToHorzSegList(e){e.outrec.isOpen||this.horzSegList.push(new nr(e))}addNewIntersectNode(e,r,n){let s=H.getLineIntersectPt(e.bot,e.top,r.bot,r.top);if(s===null&&(s={x:e.curX,y:n}),s.y>this.currentBotY||s.y<n){let o=Math.abs(e.dx),a=Math.abs(r.dx);o>100&&a>100?o>a?s=H.getClosestPtOnSegment(s,e.bot,e.top):s=H.getClosestPtOnSegment(s,r.bot,r.top):o>100?s=H.getClosestPtOnSegment(s,e.bot,e.top):a>100?s=H.getClosestPtOnSegment(s,r.bot,r.top):(s.y<n?s.y=n:s.y=this.currentBotY,o<a?s.x=g.topX(e,s.y):s.x=g.topX(r,s.y))}let i=$n(s,e,r);this.intersectList.push(i)}extractFromSEL(e){let r=e.nextInSEL;return r!==null&&(r.prevInSEL=e.prevInSEL),e.prevInSEL.nextInSEL=r,r}insert1Before2InSEL(e,r){e.prevInSEL=r.prevInSEL,e.prevInSEL!==null&&(e.prevInSEL.nextInSEL=e),e.nextInSEL=r,r.prevInSEL=e}getCurrYMaximaVertexOpen(e){let r=e.vertexTop;if(e.windDx>0)for(;r.next.pt.y===r.pt.y&&(r.flags&(Y.OpenEnd|Y.LocalMax))===Y.None;)r=r.next;else for(;r.prev.pt.y===r.pt.y&&(r.flags&(Y.OpenEnd|Y.LocalMax))===Y.None;)r=r.prev;return g.isMaximaVertex(r)||(r=null),r}getCurrYMaximaVertex(e){let r=e.vertexTop;if(e.windDx>0)for(;r.next.pt.y===r.pt.y;)r=r.next;else for(;r.prev.pt.y===r.pt.y;)r=r.prev;return g.isMaximaVertex(r)||(r=null),r}resetHorzDirection(e,r){if(e.bot.x===e.top.x){let n=e.curX,s=e.curX,i=e.nextInAEL;for(;i!==null&&i.vertexTop!==r;)i=i.nextInAEL;return{isLeftToRight:i!==null,leftX:n,rightX:s}}return e.curX<e.top.x?{isLeftToRight:!0,leftX:e.curX,rightX:e.top.x}:{isLeftToRight:!1,leftX:e.top.x,rightX:e.curX}}getLastOp(e){let r=e.outrec;return e===r.frontEdge?r.pts:r.pts.next}insertLeftEdge(e){if(this.actives===null)e.prevInAEL=null,e.nextInAEL=null,this.actives=e;else if(!this.isValidAelOrder(this.actives,e))e.prevInAEL=null,e.nextInAEL=this.actives,this.actives.prevInAEL=e,this.actives=e;else{let r=this.actives;for(;r.nextInAEL!==null&&this.isValidAelOrder(r.nextInAEL,e);)r=r.nextInAEL;r.joinWith===xe.Right&&(r=r.nextInAEL),e.nextInAEL=r.nextInAEL,r.nextInAEL!==null&&(r.nextInAEL.prevInAEL=e),e.prevInAEL=r,r.nextInAEL=e}}insertRightEdge(e,r){r.nextInAEL=e.nextInAEL,e.nextInAEL!==null&&(e.nextInAEL.prevInAEL=r),r.prevInAEL=e,e.nextInAEL=r}setWindCountForOpenPathEdge(e){let r=this.actives;if(this.fillrule===V.EvenOdd){let n=0,s=0;for(;r!==e;)g.getPolyType(r)===ve.Clip?s++:g.isOpen(r)||n++,r=r.nextInAEL;e.windCount=g.isOdd(n)?1:0,e.windCount2=g.isOdd(s)?1:0}else for(;r!==e;)g.getPolyType(r)===ve.Clip?e.windCount2+=r.windDx:g.isOpen(r)||(e.windCount+=r.windDx),r=r.nextInAEL}setWindCountForClosedPathEdge(e){let r=e.prevInAEL,n=g.getPolyType(e);if(!g.openPathsEnabled){for(;r!==null&&g.getPolyType(r)!==n;)r=r.prevInAEL;if(r===null?(e.windCount=e.windDx,r=this.actives):this.fillrule===V.EvenOdd?(e.windCount=e.windDx,e.windCount2=r.windCount2,r=r.nextInAEL):(r.windCount*r.windDx<0?Math.abs(r.windCount)>1?r.windDx*e.windDx<0?e.windCount=r.windCount:e.windCount=r.windCount+e.windDx:e.windCount=e.windDx:r.windDx*e.windDx<0?e.windCount=r.windCount:e.windCount=r.windCount+e.windDx,e.windCount2=r.windCount2,r=r.nextInAEL),this.fillrule===V.EvenOdd)for(;r!==e;)g.getPolyType(r)!==n&&(e.windCount2=e.windCount2===0?1:0),r=r.nextInAEL;else for(;r!==e;)g.getPolyType(r)!==n&&(e.windCount2+=r.windDx),r=r.nextInAEL;return}for(;r!==null&&(g.getPolyType(r)!==n||g.isOpen(r));)r=r.prevInAEL;if(r===null?(e.windCount=e.windDx,r=this.actives):this.fillrule===V.EvenOdd?(e.windCount=e.windDx,e.windCount2=r.windCount2,r=r.nextInAEL):(r.windCount*r.windDx<0?Math.abs(r.windCount)>1?r.windDx*e.windDx<0?e.windCount=r.windCount:e.windCount=r.windCount+e.windDx:e.windCount=g.isOpen(e)?1:e.windDx:r.windDx*e.windDx<0?e.windCount=r.windCount:e.windCount=r.windCount+e.windDx,e.windCount2=r.windCount2,r=r.nextInAEL),this.fillrule===V.EvenOdd)for(;r!==e;)g.getPolyType(r)!==n&&!g.isOpen(r)&&(e.windCount2=e.windCount2===0?1:0),r=r.nextInAEL;else for(;r!==e;)g.getPolyType(r)!==n&&!g.isOpen(r)&&(e.windCount2+=r.windDx),r=r.nextInAEL}isContributingOpen(e){let r,n;switch(this.fillrule){case V.Positive:n=e.windCount>0,r=e.windCount2>0;break;case V.Negative:n=e.windCount<0,r=e.windCount2<0;break;default:n=e.windCount!==0,r=e.windCount2!==0;break}switch(this.cliptype){case K.Intersection:return r;case K.Union:return!n&&!r;default:return!r}}isContributingClosed(e){switch(this.fillrule){case V.Positive:if(e.windCount!==1)return!1;break;case V.Negative:if(e.windCount!==-1)return!1;break;case V.NonZero:if(Math.abs(e.windCount)!==1)return!1;break}switch(this.cliptype){case K.Intersection:return this.fillrule===V.Positive?e.windCount2>0:this.fillrule===V.Negative?e.windCount2<0:e.windCount2!==0;case K.Union:return this.fillrule===V.Positive?e.windCount2<=0:this.fillrule===V.Negative?e.windCount2>=0:e.windCount2===0;case K.Difference:{let r=this.fillrule===V.Positive?e.windCount2<=0:this.fillrule===V.Negative?e.windCount2>=0:e.windCount2===0;return g.getPolyType(e)===ve.Subject?r:!r}case K.Xor:return!0;default:return!1}}addLocalMinPoly(e,r,n,s=!1){let i=this.newOutRec();if(e.outrec=i,r.outrec=i,g.isOpen(e))i.owner=null,i.isOpen=!0,e.windDx>0?this.setSides(i,e,r):this.setSides(i,r,e);else{i.isOpen=!1;let a=g.getPrevHotEdge(e);a!==null?(this.usingPolytree&&this.setOwner(i,a.outrec),i.owner=a.outrec,this.outrecIsAscending(a)===s?this.setSides(i,r,e):this.setSides(i,e,r)):(i.owner=null,s?this.setSides(i,e,r):this.setSides(i,r,e))}let o=new Xe(n,i);return i.pts=o,o}outrecIsAscending(e){return e===e.outrec.frontEdge}newOutRec(){let e=new rr;return e.idx=this.outrecList.length,this.outrecList.push(e),e}startOpenPath(e,r){let n=this.newOutRec();n.isOpen=!0,e.windDx>0?(n.frontEdge=e,n.backEdge=null):(n.frontEdge=null,n.backEdge=e),e.outrec=n;let s=new Xe(r,n);return n.pts=s,s}checkJoinLeft(e,r,n=!1){let s=e.prevInAEL;s!==null&&(!n&&e.curX!==s.curX||!g.isHotEdge(e)||!g.isHotEdge(s)||g.isHorizontal(e)||g.isHorizontal(s)||g.isOpen(e)||g.isOpen(s)||(r.y<e.top.y+2||r.y<s.top.y+2)&&(e.bot.y>r.y||s.bot.y>r.y)||n&&this.perpendicDistFromLineSqrdGreaterThanQuarter(r,s.bot,s.top)||H.isCollinear(e.top,r,s.top)&&(e.outrec.idx===s.outrec.idx?this.addLocalMaxPoly(s,e,r):e.outrec.idx<s.outrec.idx?this.joinOutrecPaths(e,s):this.joinOutrecPaths(s,e),s.joinWith=xe.Right,e.joinWith=xe.Left))}checkJoinRight(e,r,n=!1){let s=e.nextInAEL;s!==null&&(!n&&e.curX!==s.curX||!g.isHotEdge(e)||!g.isHotEdge(s)||g.isHorizontal(e)||g.isHorizontal(s)||g.isOpen(e)||g.isOpen(s)||(r.y<e.top.y+2||r.y<s.top.y+2)&&(e.bot.y>r.y||s.bot.y>r.y)||n&&this.perpendicDistFromLineSqrdGreaterThanQuarter(r,s.bot,s.top)||H.isCollinear(e.top,r,s.top)&&(e.outrec.idx===s.outrec.idx?this.addLocalMaxPoly(e,s,r):e.outrec.idx<s.outrec.idx?this.joinOutrecPaths(e,s):this.joinOutrecPaths(s,e),e.joinWith=xe.Right,s.joinWith=xe.Left))}perpendicDistFromLineSqrdGreaterThanQuarter(e,r,n){let s=e.x-r.x,i=e.y-r.y,o=n.x-r.x,a=n.y-r.y;if(o===0&&a===0)return!1;let u=H.maxCoordForSafeCrossSq;if(Math.abs(s)<u&&Math.abs(i)<u&&Math.abs(o)<u&&Math.abs(a)<u){let f=s*a-o*i;return f*f/(o*o+a*a)>.25}if(Number.isSafeInteger(s)&&Number.isSafeInteger(i)&&Number.isSafeInteger(o)&&Number.isSafeInteger(a)){let f=BigInt(s)*BigInt(a)-BigInt(o)*BigInt(i),c=f*f,h=BigInt(o)*BigInt(o)+BigInt(a)*BigInt(a);return Wn*c>h}let l=s*a-o*i;return l*l/(o*o+a*a)>.25}intersectEdges(e,r,n){let s;if(this.hasOpenPaths&&(g.isOpen(e)||g.isOpen(r))){if(g.isOpen(e)&&g.isOpen(r))return;if(g.isOpen(r)){let l=e;e=r,r=l}if(this.isJoined(r)&&this.split(r,n),this.cliptype===K.Union){if(!g.isHotEdge(r))return}else if(r.localMin.polytype===ve.Subject)return;switch(this.fillrule){case V.Positive:if(r.windCount!==1)return;break;case V.Negative:if(r.windCount!==-1)return;break;default:if(Math.abs(r.windCount)!==1)return;break}if(g.isHotEdge(e))s=this.addOutPt(e,n),this.setZ(e,r,s.pt),g.isFront(e)?e.outrec.frontEdge=null:e.outrec.backEdge=null,e.outrec=null;else if(n.x===e.localMin.vertex.pt.x&&n.y===e.localMin.vertex.pt.y&&!g.isOpenEndVertex(e.localMin.vertex)){let l=this.findEdgeWithMatchingLocMin(e);if(l!==null&&g.isHotEdge(l)){e.outrec=l.outrec,e.windDx>0?this.setSides(l.outrec,e,l):this.setSides(l.outrec,l,e);return}s=this.startOpenPath(e,n)}else s=this.startOpenPath(e,n);this.setZ(e,r,s.pt);return}this.isJoined(e)&&this.split(e,n),this.isJoined(r)&&this.split(r,n);let i,o;switch(e.localMin.polytype===r.localMin.polytype?this.fillrule===V.EvenOdd?(i=e.windCount,e.windCount=r.windCount,r.windCount=i):(e.windCount+r.windDx===0?e.windCount=-e.windCount:e.windCount+=r.windDx,r.windCount-e.windDx===0?r.windCount=-r.windCount:r.windCount-=e.windDx):(this.fillrule!==V.EvenOdd?e.windCount2+=r.windDx:e.windCount2=e.windCount2===0?1:0,this.fillrule!==V.EvenOdd?r.windCount2-=e.windDx:r.windCount2=r.windCount2===0?1:0),this.fillrule){case V.Positive:i=e.windCount,o=r.windCount;break;case V.Negative:i=-e.windCount,o=-r.windCount;break;default:i=Math.abs(e.windCount),o=Math.abs(r.windCount);break}let a=i===0||i===1,u=o===0||o===1;if(!(!g.isHotEdge(e)&&!a||!g.isHotEdge(r)&&!u))if(g.isHotEdge(e)&&g.isHotEdge(r))if(i!==0&&i!==1||o!==0&&o!==1||e.localMin.polytype!==r.localMin.polytype&&this.cliptype!==K.Xor)s=this.addLocalMaxPoly(e,r,n),s&&this.setZ(e,r,s.pt);else if(g.isFront(e)||e.outrec===r.outrec){s=this.addLocalMaxPoly(e,r,n),s&&this.setZ(e,r,s.pt);let l=this.addLocalMinPoly(e,r,n);this.setZ(e,r,l.pt)}else{s=this.addOutPt(e,n),this.setZ(e,r,s.pt);let l=this.addOutPt(r,n);this.setZ(e,r,l.pt),this.swapOutrecs(e,r)}else if(g.isHotEdge(e))s=this.addOutPt(e,n),this.setZ(e,r,s.pt),this.swapOutrecs(e,r);else if(g.isHotEdge(r))s=this.addOutPt(r,n),this.setZ(e,r,s.pt),this.swapOutrecs(e,r);else{let l,f;switch(this.fillrule){case V.Positive:l=e.windCount2,f=r.windCount2;break;case V.Negative:l=-e.windCount2,f=-r.windCount2;break;default:l=Math.abs(e.windCount2),f=Math.abs(r.windCount2);break}if(!g.isSamePolyType(e,r))s=this.addLocalMinPoly(e,r,n),this.setZ(e,r,s.pt);else if(i===1&&o===1){switch(s=null,this.cliptype){case K.Union:if(l>0&&f>0)return;s=this.addLocalMinPoly(e,r,n);break;case K.Difference:(g.getPolyType(e)===ve.Clip&&l>0&&f>0||g.getPolyType(e)===ve.Subject&&l<=0&&f<=0)&&(s=this.addLocalMinPoly(e,r,n));break;case K.Xor:s=this.addLocalMinPoly(e,r,n);break;default:if(l<=0||f<=0)return;s=this.addLocalMinPoly(e,r,n);break}s&&this.setZ(e,r,s.pt)}}}swapPositionsInAEL(e,r){let n=r.nextInAEL;n!==null&&(n.prevInAEL=e);let s=e.prevInAEL;s!==null&&(s.nextInAEL=r),r.prevInAEL=s,r.nextInAEL=e,e.prevInAEL=r,e.nextInAEL=n,r.prevInAEL===null&&(this.actives=r)}isValidAelOrder(e,r){if(r.curX!==e.curX)return r.curX>e.curX;let n=H.crossProductSign(e.top,r.bot,r.top);if(n!==0)return n<0;if(!g.isMaximaEdge(e)&&e.top.y>r.top.y)return H.crossProductSign(r.bot,e.top,g.nextVertex(e).pt)<=0;if(!g.isMaximaEdge(r)&&r.top.y>e.top.y)return H.crossProductSign(r.bot,r.top,g.nextVertex(r).pt)>=0;let s=r.bot.y,i=r.isLeftBound;return e.bot.y!==s||e.localMin.vertex.pt.y!==s?r.isLeftBound:e.isLeftBound!==i?i:H.isCollinear(g.prevPrevVertex(e).pt,e.bot,e.top)?!0:H.crossProductSign(g.prevPrevVertex(e).pt,r.bot,g.prevPrevVertex(r).pt)>0===i}isJoined(e){return e.joinWith!==xe.None}split(e,r){e.joinWith===xe.Right?(e.joinWith=xe.None,e.nextInAEL.joinWith=xe.None,this.addLocalMinPoly(e,e.nextInAEL,r,!0)):(e.joinWith=xe.None,e.prevInAEL.joinWith=xe.None,this.addLocalMinPoly(e.prevInAEL,e,r,!0))}setSides(e,r,n){e.frontEdge=r,e.backEdge=n}findEdgeWithMatchingLocMin(e){let r=e.nextInAEL;for(;r!==null;){if(r.localMin?.equals(e.localMin))return r;!g.isHorizontal(r)&&!(e.bot.x===r.bot.x&&e.bot.y===r.bot.y)?r=null:r=r.nextInAEL}for(r=e.prevInAEL;r!==null;){if(r.localMin?.equals(e.localMin))return r;if(!g.isHorizontal(r)&&!(e.bot.x===r.bot.x&&e.bot.y===r.bot.y))return null;r=r.prevInAEL}return r}addOutPt(e,r){let n=e.outrec,s=g.isFront(e),i=n.pts,o=i.next;if(s&&r.x===i.pt.x&&r.y===i.pt.y)return i;if(!s&&r.x===o.pt.x&&r.y===o.pt.y)return o;let a=new Xe(r,n);return o.prev=a,a.prev=i,a.next=o,i.next=a,s&&(n.pts=a),a}addLocalMaxPoly(e,r,n){if(this.isJoined(e)&&this.split(e,n),this.isJoined(r)&&this.split(r,n),g.isFront(e)===g.isFront(r))if(g.isOpenEnd(e))this.swapFrontBackSides(e.outrec);else if(g.isOpenEnd(r))this.swapFrontBackSides(r.outrec);else return this.succeeded=!1,null;let s=this.addOutPt(e,n);if(e.outrec===r.outrec){let i=e.outrec;if(i.pts=s,this.usingPolytree){let o=g.getPrevHotEdge(e);o===null?i.owner=null:this.setOwner(i,o.outrec)}this.uncoupleOutRec(e)}else g.isOpen(e)?e.windDx<0?this.joinOutrecPaths(e,r):this.joinOutrecPaths(r,e):e.outrec.idx<r.outrec.idx?this.joinOutrecPaths(e,r):this.joinOutrecPaths(r,e);return s}swapFrontBackSides(e){let r=e.frontEdge;e.frontEdge=e.backEdge,e.backEdge=r,e.pts=e.pts.next}setOwner(e,r){for(;r.owner!==null&&r.owner.pts===null;)r.owner=r.owner.owner;let n=r;for(;n!==null&&n!==e;)n=n.owner;n!==null&&(r.owner=e.owner),e.owner=r}uncoupleOutRec(e){let r=e.outrec;r!==null&&(r.frontEdge.outrec=null,r.backEdge.outrec=null,r.frontEdge=null,r.backEdge=null)}joinOutrecPaths(e,r){let n=e.outrec.pts,s=r.outrec.pts,i=n.next,o=s.next;g.isFront(e)?(o.prev=n,n.next=o,s.next=i,i.prev=s,e.outrec.pts=s,e.outrec.frontEdge=r.outrec.frontEdge,e.outrec.frontEdge!==null&&(e.outrec.frontEdge.outrec=e.outrec)):(i.prev=s,s.next=i,n.next=o,o.prev=n,e.outrec.backEdge=r.outrec.backEdge,e.outrec.backEdge!==null&&(e.outrec.backEdge.outrec=e.outrec)),r.outrec.frontEdge=null,r.outrec.backEdge=null,r.outrec.pts=null,this.setOwner(r.outrec,e.outrec),g.isOpenEnd(e)&&(r.outrec.pts=e.outrec.pts,e.outrec.pts=null),e.outrec=null,r.outrec=null}swapOutrecs(e,r){let n=e.outrec,s=r.outrec;if(n===s){let i=n.frontEdge;n.frontEdge=n.backEdge,n.backEdge=i;return}n!==null&&(e===n.frontEdge?n.frontEdge=r:n.backEdge=r),s!==null&&(r===s.frontEdge?s.frontEdge=e:s.backEdge=e),e.outrec=s,r.outrec=n}disposeIntersectNodes(){this.intersectList.length=0}static ptsReallyClose(e,r){return Math.abs(e.x-r.x)<2&&Math.abs(e.y-r.y)<2}static isVerySmallTriangle(e){return e.next.next===e.prev&&(g.ptsReallyClose(e.prev.pt,e.next.pt)||g.ptsReallyClose(e.pt,e.next.pt)||g.ptsReallyClose(e.pt,e.prev.pt))}static buildPath(e,r,n,s){if(e===null||e.next===e||!n&&e.next===e.prev)return!1;s.length=0;let i,o;for(r?(i=e.pt,o=e.prev):(e=e.next,i=e.pt,o=e.next),s.push(i);o!==e;)o.pt.x===i.x&&o.pt.y===i.y||(i=o.pt,s.push(i)),r?o=o.prev:o=o.next;return s.length!==3||n||!g.isVerySmallTriangle(o)}buildPaths(e,r){e.length=0,r.length=0;let n=0;for(;n<this.outrecList.length;){let s=this.outrecList[n++];if(s.pts===null)continue;let i=[];s.isOpen?g.buildPath(s.pts,this.reverseSolution,!0,i)&&r.push(i):(this.cleanCollinear(s),g.buildPath(s.pts,this.reverseSolution,!1,i)&&e.push(i))}return!0}buildTree(e,r){e.clear(),r.length=0;let n=0;for(;n<this.outrecList.length;){let s=this.outrecList[n++];if(s.pts!==null){if(s.isOpen){let i=[];g.buildPath(s.pts,this.reverseSolution,!0,i)&&r.push(i);continue}this.checkBounds(s)&&this.recursiveCheckOwners(s,e)}}}checkBounds(e){return e.pts===null?!1:ut.isEmpty(e.bounds)?(this.cleanCollinear(e),e.pts===null||!g.buildPath(e.pts,this.reverseSolution,!1,e.path)?!1:(e.bounds=H.getBounds(e.path),!0)):!0}recursiveCheckOwners(e,r){if(!(e.polypath!==null||ut.isEmpty(e.bounds))){for(;e.owner!==null&&!(e.owner.splits!==null&&this.checkSplitOwner(e,e.owner.splits)||e.owner.pts!==null&&this.checkBounds(e.owner)&&this.containsRect(e.owner.bounds,e.bounds)&&this.path1InsidePath2(e.pts,e.owner.pts));)e.owner=e.owner.owner;e.owner!==null?(e.owner.polypath===null&&this.recursiveCheckOwners(e.owner,r),e.polypath=e.owner.polypath.addChild(e.path)):e.polypath=r.addChild(e.path)}}cleanCollinear(e){if(e=this.getRealOutRec(e),e===null||e.isOpen)return;if(!this.isValidClosedPath(e.pts)){e.pts=null;return}let r=e.pts,n=r;for(;;){if(n!==null&&H.isCollinear(n.prev.pt,n.pt,n.next.pt)&&(n.pt.x===n.prev.pt.x&&n.pt.y===n.prev.pt.y||n.pt.x===n.next.pt.x&&n.pt.y===n.next.pt.y||!this.preserveCollinear||H.dotProductSign(n.prev.pt,n.pt,n.next.pt)<0)){if(n===e.pts&&(e.pts=n.prev),n=this.disposeOutPt(n),!this.isValidClosedPath(n)){e.pts=null;return}r=n;continue}if(n===null||(n=n.next,n===r))break}this.fixSelfIntersects(e)}isValidClosedPath(e){return e!==null&&e.next!==e&&(e.next!==e.prev||!g.isVerySmallTriangle(e))}disposeOutPt(e){let r=e.next===e?null:e.next;return e.prev.next=e.next,e.next.prev=e.prev,r}fixSelfIntersects(e){let r=e.pts;if(r.prev!==r.next.next)for(;;){if(r.next&&r.next.next&&this.boundingBoxesOverlap(r.prev.pt,r.pt,r.next.pt,r.next.next.pt)&&H.segsIntersect(r.prev.pt,r.pt,r.next.pt,r.next.next.pt)){if((r===e.pts||r.next===e.pts)&&(e.pts=e.pts.prev),this.doSplitOp(e,r),e.pts===null)return;if(r=e.pts,r.prev===r.next.next)break;continue}if(r=r.next,r===e.pts)break}}doSplitOp(e,r){let n=r.prev,s=r.next.next;e.pts=n;let i=H.getLineIntersectPt(n.pt,r.pt,r.next.pt,s.pt);this.zCallbackInternal&&this.zCallbackInternal(n.pt,r.pt,r.next.pt,s.pt,i);let o=g.areaOutPt(n),a=o<Tt?-o:o;if(a<Wn){e.pts=null;return}let u=this.areaTriangle(i,r.pt,r.next.pt),l=u<Tt?-u:u;if(i.x===n.pt.x&&i.y===n.pt.y||i.x===s.pt.x&&i.y===s.pt.y)s.prev=n,n.next=s;else{let h=new Xe(i,e);h.prev=n,h.next=s,s.prev=h,n.next=h}if(!(l>Fo)||!(l>a)&&u>Tt!=o>Tt)return;let f=this.newOutRec();f.owner=e.owner,r.outrec=f,r.next.outrec=f;let c=new Xe(i,f);c.prev=r.next,c.next=r,f.pts=c,r.prev=c,r.next.next=c,this.usingPolytree&&(this.path1InsidePath2(n,c)?(f.splits===null&&(f.splits=[]),f.splits.push(e.idx)):(e.splits===null&&(e.splits=[]),e.splits.push(f.idx)))}static areaOutPt(e){let r=H.maxCoordForSafeAreaProduct,n=0,s=!0,i=e;do{let a=i.prev,u=i.pt;if(Math.abs(a.pt.x)>=r||Math.abs(a.pt.y)>=r||Math.abs(u.x)>=r||Math.abs(u.y)>=r){s=!1;break}n+=(a.pt.y+u.y)*(a.pt.x-u.x),i=i.next}while(i!==e);if(s)return BigInt(Math.round(n));let o=Tt;i=e;do{let a=i.prev;if(Number.isSafeInteger(a.pt.y)&&Number.isSafeInteger(i.pt.y)&&Number.isSafeInteger(a.pt.x)&&Number.isSafeInteger(i.pt.x)){let u=BigInt(a.pt.y)+BigInt(i.pt.y),l=BigInt(a.pt.x)-BigInt(i.pt.x);o+=u*l}else{let u=a.pt.y+i.pt.y,l=a.pt.x-i.pt.x;o+=BigInt(Math.round(u*l))}i=i.next}while(i!==e);return o}areaTriangle(e,r,n){let s=H.maxCoordForSafeAreaProduct;if(Math.abs(e.x)<s&&Math.abs(e.y)<s&&Math.abs(r.x)<s&&Math.abs(r.y)<s&&Math.abs(n.x)<s&&Math.abs(n.y)<s){let o=(n.y+e.y)*(n.x-e.x)+(e.y+r.y)*(e.x-r.x)+(r.y+n.y)*(r.x-n.x);return BigInt(Math.round(o))}if(Number.isSafeInteger(e.x)&&Number.isSafeInteger(e.y)&&Number.isSafeInteger(r.x)&&Number.isSafeInteger(r.y)&&Number.isSafeInteger(n.x)&&Number.isSafeInteger(n.y)){let o=(BigInt(n.y)+BigInt(e.y))*(BigInt(n.x)-BigInt(e.x)),a=(BigInt(e.y)+BigInt(r.y))*(BigInt(e.x)-BigInt(r.x)),u=(BigInt(r.y)+BigInt(n.y))*(BigInt(r.x)-BigInt(n.x));return o+a+u}let i=(n.y+e.y)*(n.x-e.x)+(e.y+r.y)*(e.x-r.x)+(r.y+n.y)*(r.x-n.x);return BigInt(Math.round(i))}isValidOwner(e,r){for(;r!==null&&r!==e;)r=r.owner;return r===null}containsRect(e,r){return r.left>=e.left&&r.right<=e.right&&r.top>=e.top&&r.bottom<=e.bottom}checkSplitOwner(e,r){for(let n=0;n<r.length;n++){let s=this.outrecList[r[n]];if(s.pts===null&&s.splits!==null&&this.checkSplitOwner(e,s.splits))return!0;if(s=this.getRealOutRec(s),!(s===null||s===e||s.recursiveSplit===e)){if(s.recursiveSplit=e,s.splits!==null&&this.checkSplitOwner(e,s.splits))return!0;if(!(!this.checkBounds(s)||!this.containsRect(s.bounds,e.bounds)||!this.path1InsidePath2(e.pts,s.pts)))return this.isValidOwner(e,s)||(s.owner=e.owner),e.owner=s,!0}}return!1}};y(g,"openPathsEnabled",!0);var or=g,Me=class extends or{constructor(){super(...arguments);y(this,"zCallback")}getZCallback(){return this.zCallback}addPath(r,n,s=!1){super.addPath(r,n,s)}addReuseableData(r){super.addReuseableData(r)}addPaths(r,n,s=!1){super.addPaths(r,n,s)}addSubject(r){this.addPaths(r,ve.Subject)}addOpenSubject(r){this.addPaths(r,ve.Subject,!0)}addClip(r){this.addPaths(r,ve.Clip)}execute(r,n,s,i){if(Array.isArray(s)){let o=s,a=i;o.length=0,a&&(a.length=0);try{this.executeInternal(r,n),this.buildPaths(o,a||[])}catch{this.succeeded=!1}return this.clearSolutionOnly(),this.succeeded}else{let o=s,a=i;o.clear(),a&&(a.length=0),this.usingPolytree=!0;try{this.executeInternal(r,n),this.buildTree(o,a||[])}catch{this.succeeded=!1}return this.clearSolutionOnly(),this.succeeded}}};var $r={area(t){return H.area(t)},areaD(t){let e=0,r=t.length;if(r<3)return 0;let n=t[r-1];for(let s of t)e+=(n.y+s.y)*(n.x-s.x),n=s;return e*.5},scalePath64(t,e){let r=H.maxSafeCoordinateForScale(e),n=[];for(let s of t)H.checkSafeScaleValue(s.x,r,"scalePath64"),H.checkSafeScaleValue(s.y,r,"scalePath64"),n.push({x:Math.round(s.x*e),y:Math.round(s.y*e)});return n},scalePaths64(t,e){let r=[];for(let n of t)r.push($r.scalePath64(n,e));return r},scalePathD(t,e){let r=[];for(let n of t)r.push({x:n.x*e,y:n.y*e});return r},scalePathsD(t,e){let r=[];for(let n of t)r.push($r.scalePathD(n,e));return r}};var ye;(function(t){t[t.Miter=0]="Miter",t[t.Square=1]="Square",t[t.Bevel=2]="Bevel",t[t.Round=3]="Round"})(ye||(ye={}));var te;(function(t){t[t.Polygon=0]="Polygon",t[t.Joined=1]="Joined",t[t.Butt=2]="Butt",t[t.Square=3]="Square",t[t.Round=4]="Round"})(te||(te={}));var Zr=class{constructor(e,r,n=te.Polygon){y(this,"inPaths");y(this,"joinType");y(this,"endType");y(this,"pathsReversed");y(this,"lowestPathIdx");this.joinType=r,this.endType=n;let s=n===te.Polygon||n===te.Joined;this.inPaths=[];for(let i of e)this.inPaths.push(lt.stripDuplicates(i,s));if(n===te.Polygon){let i=lt.getLowestPathInfo(this.inPaths);this.lowestPathIdx=i.idx,this.pathsReversed=this.lowestPathIdx>=0&&i.isNegArea}else this.lowestPathIdx=-1,this.pathsReversed=!1}},ee=class ee{constructor(e=2,r=0,n=!1,s=!1){y(this,"groupList",[]);y(this,"pathOut",[]);y(this,"normals",[]);y(this,"solution",[]);y(this,"solutionTree",null);y(this,"groupDelta",0);y(this,"delta",0);y(this,"mitLimSqr",0);y(this,"stepsPerRad",0);y(this,"stepSin",0);y(this,"stepCos",0);y(this,"joinType",ye.Bevel);y(this,"endType",te.Polygon);y(this,"arcTolerance",0);y(this,"mergeGroups",!0);y(this,"miterLimit",2);y(this,"preserveCollinear",!1);y(this,"reverseSolution",!1);y(this,"zCallback");y(this,"deltaCallback",null);y(this,"ZCB",(e,r,n,s,i)=>{(e.z||0)!==0&&(e.z===n.z||e.z===s.z)?i.z=e.z:(n.z||0)!==0&&n.z===r.z?i.z=n.z:(r.z||0)!==0&&r.z===s.z?i.z=r.z:this.zCallback&&this.zCallback(e,r,n,s,i)});this.miterLimit=e,this.arcTolerance=r,this.mergeGroups=!0,this.preserveCollinear=n,this.reverseSolution=s}clear(){this.groupList.length=0}addPath(e,r,n){if(e.length===0)return;let s=[e];this.addPaths(s,r,n)}addPaths(e,r,n){e.length!==0&&this.groupList.push(new Zr(e,r,n))}calcSolutionCapacity(){let e=0;for(let r of this.groupList)e+=r.endType===te.Joined?r.inPaths.length*2:r.inPaths.length;return e}checkPathsReversed(){let e=!1;for(let r of this.groupList)if(r.endType===te.Polygon){e=r.pathsReversed;break}return e}executeInternal(e){if(this.groupList.length===0)return;if(Math.abs(e)<.5){for(let i of this.groupList)for(let o of i.inPaths)this.solution.push(o);return}this.delta=e,this.mitLimSqr=this.miterLimit<=1?2:2/ee.sqr(this.miterLimit);for(let i of this.groupList)this.doGroupOffset(i);if(this.groupList.length===0)return;let r=this.checkPathsReversed(),n=r?V.Negative:V.Positive,s=new Me;s.preserveCollinear=this.preserveCollinear,s.reverseSolution=this.reverseSolution!==r,s.zCallback=this.ZCB,s.addSubject(this.solution),this.solutionTree!==null?s.execute(K.Union,n,this.solutionTree):s.execute(K.Union,n,this.solution)}execute(e,r){if(Array.isArray(r)){let n=r;n.length=0,this.solution=n,this.executeInternal(e)}else{let n=r;n.clear(),this.solutionTree=n,this.solution=[],this.executeInternal(e)}}executeWithCallback(e,r){this.deltaCallback=e,this.execute(1,r)}static getUnitNormal(e,r){let n=r.x-e.x,s=r.y-e.y;if(n===0&&s===0)return{x:0,y:0};let i=1/Math.sqrt(n*n+s*s);return{x:s*i,y:-n*i}}static getLowestPathInfo(e){let r=-1,n=!1,s={x:Number.MAX_SAFE_INTEGER,y:Number.MIN_SAFE_INTEGER};for(let i=0;i<e.length;++i){let o=Number.MAX_VALUE;for(let a of e[i])if(!(a.y<s.y||a.y===s.y&&a.x>=s.x)){if(o===Number.MAX_VALUE){if(o=ee.area(e[i]),o===0)break;n=o<0}r=i,s.x=a.x,s.y=a.y}}return{idx:r,isNegArea:n}}static translatePoint(e,r,n){return{x:e.x+r,y:e.y+n,z:e.z}}static reflectPoint(e,r){return{x:r.x+(r.x-e.x),y:r.y+(r.y-e.y),z:e.z}}static almostZero(e,r=.001){return Math.abs(e)<r}static hypotenuse(e,r){return Math.sqrt(e*e+r*r)}static normalizeVector(e){let r=ee.hypotenuse(e.x,e.y);if(ee.almostZero(r))return{x:0,y:0};let n=1/r;return{x:e.x*n,y:e.y*n}}static getAvgUnitVector(e,r){return ee.normalizeVector({x:e.x+r.x,y:e.y+r.y})}static intersectPoint(e,r,n,s){if(H.isAlmostZero(e.x-r.x)){if(H.isAlmostZero(n.x-s.x))return{x:0,y:0};let i=(s.y-n.y)/(s.x-n.x),o=n.y-i*n.x;return{x:e.x,y:i*e.x+o}}if(H.isAlmostZero(n.x-s.x)){let i=(r.y-e.y)/(r.x-e.x),o=e.y-i*e.x;return{x:n.x,y:i*n.x+o}}else{let i=(r.y-e.y)/(r.x-e.x),o=e.y-i*e.x,a=(s.y-n.y)/(s.x-n.x),u=n.y-a*n.x;if(H.isAlmostZero(i-a))return{x:0,y:0};let l=(u-o)/(i-a);return{x:l,y:i*l+o}}}getPerpendic(e,r){return{x:Math.round(e.x+r.x*this.groupDelta),y:Math.round(e.y+r.y*this.groupDelta),z:e.z||0}}getPerpendicD(e,r){return{x:e.x+r.x*this.groupDelta,y:e.y+r.y*this.groupDelta,z:e.z||0}}doBevel(e,r,n){let s,i,o=e[r].z||0;if(r===n){let a=Math.abs(this.groupDelta);s={x:Math.round(e[r].x-a*this.normals[r].x),y:Math.round(e[r].y-a*this.normals[r].y),z:o},i={x:Math.round(e[r].x+a*this.normals[r].x),y:Math.round(e[r].y+a*this.normals[r].y),z:o}}else s={x:Math.round(e[r].x+this.groupDelta*this.normals[n].x),y:Math.round(e[r].y+this.groupDelta*this.normals[n].y),z:o},i={x:Math.round(e[r].x+this.groupDelta*this.normals[r].x),y:Math.round(e[r].y+this.groupDelta*this.normals[r].y),z:o};this.pathOut.push(s),this.pathOut.push(i)}doSquare(e,r,n){let s;r===n?s={x:this.normals[r].y,y:-this.normals[r].x}:s=ee.getAvgUnitVector({x:-this.normals[n].y,y:this.normals[n].x},{x:this.normals[r].y,y:-this.normals[r].x});let i=Math.abs(this.groupDelta),o={x:e[r].x,y:e[r].y,z:e[r].z||0};o=ee.translatePoint(o,i*s.x,i*s.y);let a=ee.translatePoint(o,this.groupDelta*s.y,this.groupDelta*-s.x),u=ee.translatePoint(o,this.groupDelta*-s.y,this.groupDelta*s.x),l=this.getPerpendicD(e[n],this.normals[n]);if(r===n){let f={x:l.x+s.x*this.groupDelta,y:l.y+s.y*this.groupDelta},c=ee.intersectPoint(a,u,l,f);c.z=o.z,this.pathOut.push(Be.fromPointD(ee.reflectPoint(c,o))),this.pathOut.push(Be.fromPointD(c))}else{let f=this.getPerpendicD(e[r],this.normals[n]),c=ee.intersectPoint(a,u,l,f);c.z=o.z,this.pathOut.push(Be.fromPointD(c)),this.pathOut.push(Be.fromPointD(ee.reflectPoint(c,o)))}}doMiter(e,r,n,s){let i=this.groupDelta/(s+1);this.pathOut.push({x:Math.round(e[r].x+(this.normals[n].x+this.normals[r].x)*i),y:Math.round(e[r].y+(this.normals[n].y+this.normals[r].y)*i),z:e[r].z||0})}doRound(e,r,n,s){if(this.deltaCallback!==null){let l=Math.abs(this.groupDelta),f=this.arcTolerance>.01?this.arcTolerance:l*ee.arc_const,c=Math.PI/Math.acos(1-f/l);this.stepSin=Math.sin(2*Math.PI/c),this.stepCos=Math.cos(2*Math.PI/c),this.groupDelta<0&&(this.stepSin=-this.stepSin),this.stepsPerRad=c/(2*Math.PI)}let i=e[r],o=i.z||0,a={x:this.normals[n].x*this.groupDelta,y:this.normals[n].y*this.groupDelta};r===n&&tr.negate(a),this.pathOut.push({x:Math.round(i.x+a.x),y:Math.round(i.y+a.y),z:o});let u=Math.ceil(this.stepsPerRad*Math.abs(s));for(let l=1;l<u;l++)a={x:a.x*this.stepCos-this.stepSin*a.y,y:a.x*this.stepSin+a.y*this.stepCos},this.pathOut.push({x:Math.round(i.x+a.x),y:Math.round(i.y+a.y),z:o});this.pathOut.push(this.getPerpendic(e[r],this.normals[r]))}buildNormals(e){let r=e.length;if(this.normals.length=0,r!==0){for(let n=0;n<r-1;n++)this.normals.push(ee.getUnitNormal(e[n],e[n+1]));this.normals.push(ee.getUnitNormal(e[r-1],e[0]))}}offsetPoint(e,r,n,s){if(Be.equals(r[n],r[s]))return;let i=H.crossProductD(this.normals[n],this.normals[s]),o=H.dotProductD(this.normals[n],this.normals[s]);if(i>1?i=1:i<-1&&(i=-1),this.deltaCallback!==null&&(this.groupDelta=this.deltaCallback(r,this.normals,n,s),e.pathsReversed&&(this.groupDelta=-this.groupDelta)),Math.abs(this.groupDelta)<ee.Tolerance){this.pathOut.push(r[n]);return}if(o>-.999&&i*this.groupDelta<0)this.pathOut.push(this.getPerpendic(r[n],this.normals[s])),this.pathOut.push(r[n]),this.pathOut.push(this.getPerpendic(r[n],this.normals[n]));else if(o>.999&&this.joinType!==ye.Round)this.doMiter(r,n,s,o);else switch(this.joinType){case ye.Miter:o>this.mitLimSqr-1?this.doMiter(r,n,s,o):this.doSquare(r,n,s);break;case ye.Round:this.doRound(r,n,s,Math.atan2(i,o));break;case ye.Bevel:this.doBevel(r,n,s);break;default:this.doSquare(r,n,s);break}}offsetPolygon(e,r){this.pathOut=[];let n=r.length,s=n-1;for(let i=0;i<n;i++)this.offsetPoint(e,r,i,s),s=i;this.solution.push(this.pathOut)}offsetOpenJoined(e,r){this.offsetPolygon(e,r);let n=[...r].reverse();this.buildNormals(n),this.offsetPolygon(e,n)}offsetOpenPath(e,r){this.pathOut=[];let n=r.length-1;if(this.deltaCallback!==null&&(this.groupDelta=this.deltaCallback(r,this.normals,0,0)),Math.abs(this.groupDelta)<ee.Tolerance)this.pathOut.push(r[0]);else switch(this.endType){case te.Butt:this.doBevel(r,0,0);break;case te.Round:this.doRound(r,0,0,Math.PI);break;default:this.doSquare(r,0,0);break}for(let s=1,i=0;s<n;s++)this.offsetPoint(e,r,s,i),i=s;for(let s=n;s>0;s--)this.normals[s]={x:-this.normals[s-1].x,y:-this.normals[s-1].y};if(this.normals[0]=this.normals[n],this.deltaCallback!==null&&(this.groupDelta=this.deltaCallback(r,this.normals,n,n)),Math.abs(this.groupDelta)<ee.Tolerance)this.pathOut.push(r[n]);else switch(this.endType){case te.Butt:this.doBevel(r,n,n);break;case te.Round:this.doRound(r,n,n,Math.PI);break;default:this.doSquare(r,n,n);break}for(let s=n-1,i=n;s>0;s--)this.offsetPoint(e,r,s,i),i=s;this.solution.push(this.pathOut)}doGroupOffset(e){e.endType===te.Polygon?(e.lowestPathIdx<0&&(this.delta=Math.abs(this.delta)),this.groupDelta=e.pathsReversed?-this.delta:this.delta):this.groupDelta=Math.abs(this.delta);let r=Math.abs(this.groupDelta);if(this.joinType=e.joinType,this.endType=e.endType,e.joinType===ye.Round||e.endType===te.Round){let n=this.arcTolerance>.01?this.arcTolerance:r*ee.arc_const,s=Math.PI/Math.acos(1-n/r);this.stepSin=Math.sin(2*Math.PI/s),this.stepCos=Math.cos(2*Math.PI/s),this.groupDelta<0&&(this.stepSin=-this.stepSin),this.stepsPerRad=s/(2*Math.PI)}for(let n of e.inPaths){this.pathOut=[];let s=n.length;if(s===1){let i=n[0];this.deltaCallback!==null&&(this.groupDelta=this.deltaCallback(n,this.normals,0,0),e.pathsReversed&&(this.groupDelta=-this.groupDelta));let o=i.z||0;if(e.endType===te.Round){let a=Math.ceil(this.stepsPerRad*2*Math.PI);if(this.pathOut=ee.ellipse(i,Math.abs(this.groupDelta),Math.abs(this.groupDelta),a),o!==0)for(let u=0;u<this.pathOut.length;u++)this.pathOut[u].z=o}else{let a=Math.ceil(Math.abs(this.groupDelta)),u={left:i.x-a,top:i.y-a,right:i.x+a,bottom:i.y+a};this.pathOut=[{x:u.left,y:u.top,z:o},{x:u.right,y:u.top,z:o},{x:u.right,y:u.bottom,z:o},{x:u.left,y:u.bottom,z:o}]}this.solution.push(this.pathOut);continue}switch(s===2&&e.endType===te.Joined&&(this.endType=e.joinType===ye.Round?te.Round:te.Square),this.buildNormals(n),this.endType){case te.Polygon:this.offsetPolygon(e,n);break;case te.Joined:this.offsetOpenJoined(e,n);break;default:this.offsetOpenPath(e,n);break}}}static stripDuplicates(e,r){let n=e.length,s=[];if(n===0)return s;let i=e[0];s.push(i);for(let o=1;o<n;o++)Be.equals(i,e[o])||(i=e[o],s.push(i));return r&&Be.equals(i,s[0])&&s.pop(),s}static area(e){return H.area(e)}static sqr(e){return e*e}static ellipse(e,r,n=0,s=0){if(r<=0)return[];n<=0&&(n=r),s<=2&&(s=Math.ceil(Math.PI*Math.sqrt((r+n)/2)));let i=Math.sin(2*Math.PI/s),o=Math.cos(2*Math.PI/s),a=o,u=i,l=[{x:Math.round(e.x+r),y:e.y}];for(let f=1;f<s;++f){l.push({x:Math.round(e.x+r*a),y:Math.round(e.y+n*u)});let c=a*o-u*i;u=u*o+a*i,a=c}return l}};y(ee,"Tolerance",1e-12),y(ee,"arc_const",.002);var lt=ee;var Eh=BigInt(2);function _r(t,e,r){return typeof e=="number"?Yr(K.Union,t,null,e):Yr(K.Union,t,e,r)}function Yr(t,e,r,n){let s=[];if(e===null)return s;let i=new Me;return i.addPaths(e,ve.Subject),r!==null&&i.addPaths(r,ve.Clip),i.execute(t,n,s),s}function ar(t,e,r,n,s=2,i=0){let o=new lt(s,i);o.addPaths(t,r,n);let a=[];return o.execute(e,a),a}var Ye=1e4;function ft(){return{layers:new Map,parts:[]}}function Le(t,e="cut"){return{layers:new Map([[e,{regions:t,lines:[]}]]),parts:[]}}function yt(t,e="cut"){return{layers:new Map([[e,{regions:[],lines:t}]]),parts:[]}}function _n(t){if(t.parts.length)return!1;for(let e of t.layers.values())if(e.regions.length||e.lines.length)return!1;return!0}var _e=t=>t.map(e=>e.map(([r,n])=>({x:Math.round(r*Ye),y:Math.round(n*Ye)}))),bt=t=>t.filter(e=>e.length>=2).map(e=>e.map(r=>[r.x/Ye,r.y/Ye]));function fe(t,e="nonzero"){if(!t.length)return[];let r=e==="evenodd"?V.EvenOdd:V.NonZero;return bt(_r(_e(t),r)).filter(n=>n.length>=3)}function jn(t,e,r){if(!e.length)return[];let n=new Me;n.addSubject(_e(e)),r.length&&n.addClip(_e(r));let s=[];return n.execute(t,V.NonZero,s),bt(s).filter(i=>i.length>=3)}var ur=(t,e)=>e.length?jn(K.Difference,t,e):fe(t),lr=(t,e)=>jn(K.Intersection,t,e);function Dt(t,e,r){if(!t.length)return[];if(!e.length)return r==="outside"?t:[];let n=new Me;n.addOpenSubject(_e(t)),n.addClip(_e(e));let s=[],i=[];return n.execute(r==="inside"?K.Intersection:K.Difference,V.NonZero,s,i),bt(i)}function fr(t,e,r="round",n=.01){if(!t.length)return[];if(e===0)return fe(t);let s=r==="round"?ye.Round:r==="square"?ye.Square:ye.Miter,i=ar(_e(fe(t)),e*Ye,s,te.Polygon,2,n*Ye);return bt(i).filter(o=>o.length>=3)}function Kn(t,e){if(!t.length||e<=0)return[];let r=ar(_e(t),e/2*Ye,ye.Round,te.Round,2,.01*Ye);return bt(r)}function Jn(t){if(!t.length)return[];let e=new At,r=new Me;r.addSubject(_e(t)),r.execute(K.Union,V.NonZero,e);let n=[],s=i=>{for(let o=0;o<i.count;o++){let a=i.child(o),u=[a.poly];for(let l=0;l<a.count;l++){let f=a.child(l);u.push(f.poly),s(f)}n.push(bt(u))}};return s(e),n}function je(t){let e=0;for(let r=0,n=t.length-1;r<t.length;n=r++)e+=(t[n][0]+t[r][0])*(t[n][1]-t[r][1]);return-e/2}function Zn(t,[e,r]){return[t[0]*e+t[2]*r+t[4],t[1]*e+t[3]*r+t[5]]}function Yn(t,e){let r=e[0]*e[3]-e[1]*e[2]<0,n=new Map;for(let[s,i]of t)n.set(s,{regions:i.regions.map(o=>{let a=o.map(u=>Zn(e,u));return r?a.reverse():a}),lines:i.lines.map(o=>o.map(a=>Zn(e,a)))});return n}function hr(t,e){return{layers:Yn(t.layers,e),parts:t.parts.map(r=>({...r,layers:Yn(r.layers,e)}))}}function Ut(t){let e=ft();for(let r of t){for(let[n,s]of r.layers){let i=e.layers.get(n)??{regions:[],lines:[]};i.regions.push(...s.regions),i.lines.push(...s.lines),e.layers.set(n,i)}e.parts.push(...r.parts)}return e}function cr(t,e){let r={regions:[],lines:[]};for(let n of t.layers.values())r.regions.push(...n.regions),r.lines.push(...n.lines);return{layers:new Map([[e,r]]),parts:t.parts}}function pr(t){let e=1/0,r=1/0,n=-1/0,s=-1/0;for(let i of t)for(let[o,a]of i)o<e&&(e=o),a<r&&(r=a),o>n&&(n=o),a>s&&(s=a);return e===1/0?null:[e,r,n,s]}function jr(t,e){let r=[];for(let[n,s]of t)e?.(n)||r.push(...s.regions,...s.lines);return pr(r)}function Qn(t){let e=[...t].sort((i,o)=>i[0]-o[0]||i[1]-o[1]);if(e.length<3)return e;let r=(i,o,a)=>(o[0]-i[0])*(a[1]-i[1])-(o[1]-i[1])*(a[0]-i[0]),n=[];for(let i of e){for(;n.length>=2&&r(n[n.length-2],n[n.length-1],i)<=0;)n.pop();n.push(i)}let s=[];for(let i=e.length-1;i>=0;i--){let o=e[i];for(;s.length>=2&&r(s[s.length-2],s[s.length-1],o)<=0;)s.pop();s.push(o)}return s.pop(),n.pop(),n.concat(s)}function es(t,e,r,n){return t<1e-9?3:e>0?Math.max(Math.floor(e),3):Math.max(Math.ceil(Math.min(360/r,t*2*Math.PI/n)),5)}function dr(t,e,r){let n=[];for(let s=0;s<r;s++){let i=2*Math.PI*s/r;n.push([t*Math.cos(i),e*Math.sin(i)])}return n}function ts(t,e,r,n){if(r=Math.min(r,t/2,e/2),r<=0)return[[0,0],[t,0],[t,e],[0,e]];let s=Math.max(1,Math.ceil(n(r)/4)),i=[],o=[[t-r,r,-90],[t-r,e-r,0],[r,e-r,90],[r,r,180]];for(let[a,u,l]of o)for(let f=0;f<=s;f++){let c=(l+90*f/s)*Math.PI/180;i.push([a+r*Math.cos(c),u+r*Math.sin(c)])}return i}function gr(t,e){let r=Math.round(t/e);return r%2===0&&(r+=t/e>r?1:-1),Math.max(3,r)}var Rt=(t,e,r,n)=>[[t,e],[r,e],[r,n],[t,n]];function No(t,e,r,n){if(e==="flat")return[];let s=gr(t,n),i=t/s,o=[];for(let a=0;a<s;a++)(e==="out"?a%2===1:a%2===0)&&o.push(Rt(a*i,-1,(a+1)*i,r));return o}function rs(t,e,r,n,s){let i=[([u,l])=>[u,l],([u,l])=>[t-l,u],([u,l])=>[t-u,e-l],([u,l])=>[l,e-u]],o=[t,e,t,e],a=[];return r.forEach((u,l)=>{for(let f of No(o[l],u,n,s))a.push(f.map(i[l]))}),ur([Rt(0,0,t,e)],a)}function ns(t,e,r,n){let s=gr(t,n),i=t/s,o=[];for(let a=0;a<s;a++)(e==="out"?a%2===0:a%2===1)&&o.push(Rt(a*i,-r/2,(a+1)*i,r/2));return o}function ss(t,e,r,n,s){let i=Rt(-t/2,-1,t/2,e),o=Rt(-r/2,s,r/2,s+n);return[i,o]}function is(t,e,r,n,s){let i=[],o=s+n,a=Math.floor(t/r),u=(t-a*r)/2;for(let l=0;l<=a;l++){let f=u+l*r,c=l%2===0?n:n-o/2;for(let h=c;h<e;h+=o){let p=Math.max(h,l%2===0?n:0),d=Math.min(h+s,e-(l%2===0?n:0));d-p>=n/2&&i.push([[f,p],[f,d]])}}return i}var z=class extends Error{constructor(r,n){super(n?`${r} (line ${n.line}, column ${n.col})`:r);this.echoes=[];this.name="KerfError",n&&(this.line=n.line,this.col=n.col)}},Bo=["<=",">=","==","!=","&&","||","+","-","*","/","%","^","<",">","!","?",":","=",".",",",";","(",")","[","]","{","}","#"];function vr(t){let e=[],r=[],n=0,s=1,i=0,o=()=>({line:s,col:n-i+1,offset:n}),a=u=>{for(let l=0;l<u;l++)t[n]===`
7
+ `&&(s++,i=n+1),n++};for(;n<t.length;){let u=t[n];if(u===" "||u===" "||u==="\r"||u===`
8
+ `){a(1);continue}if(u==="/"&&t[n+1]==="/"){let c=t.indexOf(`
9
+ `,n),h=c<0?t.length:c,p=/^[ \t]*$/.test(t.slice(t.lastIndexOf(`
10
+ `,n-1)+1,n));r.push({text:t.slice(n+2,h).trim(),line:s,block:!1,own:p}),n=h;continue}if(u==="/"&&t[n+1]==="*"){let c=o(),h=t.indexOf("*/",n+2);if(h<0)throw new z("Unclosed block comment",c);r.push({text:t.slice(n+2,h).trim(),line:c.line,block:!0,own:!0}),a(h+2-n);continue}let l=o();if(/[0-9]/.test(u)||u==="."&&/[0-9]/.test(t[n+1]??"")){let c=/^(?:\d+\.?\d*|\.\d+)(?:[eE][+-]?\d+)?/.exec(t.slice(n));e.push({type:"num",value:c[0],pos:l}),a(c[0].length);continue}if(/[A-Za-z_$]/.test(u)){let c=/^[A-Za-z_$][A-Za-z0-9_]*/.exec(t.slice(n));e.push({type:"id",value:c[0],pos:l}),a(c[0].length);continue}if(u==='"'){let c="";for(a(1);n<t.length&&t[n]!=='"';){if(t[n]==="\\"){let h=t[n+1];if(h==="n")c+=`
11
+ `;else if(h==="t")c+=" ";else if(h==="u"){let p=t.slice(n+2,n+6);if(!/^[0-9a-fA-F]{4}$/.test(p))throw new z("Bad \\u escape",o());c+=String.fromCharCode(parseInt(p,16)),a(4)}else c+=h;a(2);continue}if(t[n]===`
12
+ `)throw new z("Unclosed string",l);c+=t[n],a(1)}if(n>=t.length)throw new z("Unclosed string",l);a(1),e.push({type:"str",value:c,pos:l});continue}if(u==="<"&&/^<[A-Za-z0-9_./-]+>/.test(t.slice(n))){let c=e[e.length-1];if(c&&c.type==="id"&&(c.value==="use"||c.value==="include")){let h=/^<([A-Za-z0-9_./-]+)>/.exec(t.slice(n));e.push({type:"str",value:h[1],pos:l}),a(h[0].length);continue}}let f=Bo.find(c=>t.startsWith(c,n));if(!f)throw new z(`Unexpected character "${u}"`,l);e.push({type:"punct",value:f,pos:l}),a(f.length)}return e.push({type:"eof",value:"",pos:o()}),{tokens:e,comments:r}}var Kr=new Set(["module","function","if","else","for","let","each","use","include","true","false","undef"]);function Ke(t){let{tokens:e,comments:r}=vr(t),n=new Jr(e),s=[];for(;!n.at("eof");)s.push(...n.statement());return{program:{body:s},comments:r}}var Nt=class Nt{constructor(e){this.tokens=e;this.i=0}peek(e=0){return this.tokens[Math.min(this.i+e,this.tokens.length-1)]}at(e,r,n=0){let s=this.peek(n);return s.type===e&&(r===void 0||s.value===r)}isP(e,r=0){return this.at("punct",e,r)}isK(e,r=0){return this.at("id",e,r)}next(){return this.tokens[this.i++]}fail(e,r=this.peek()){let n=r.type==="eof"?"end of file":`"${r.value}"`;throw new z(`${e}, found ${n}`,r.pos)}expectP(e){return this.isP(e)||this.fail(`Expected "${e}"`),this.next()}ident(){let e=this.peek();return(e.type!=="id"||Kr.has(e.value))&&this.fail("Expected a name"),this.next()}statement(){let e=this.peek();if(this.isP(";"))return this.next(),[];if(this.isP("{")){this.next();let o=[];for(;!this.isP("}");)this.at("eof")&&this.fail('Expected "}"'),o.push(...this.statement());return this.next(),[{kind:"block",body:o,pos:e.pos}]}if(this.isK("module")){this.next();let o=this.ident().value,a=this.params();return[{kind:"module",name:o,params:a,body:this.body(),pos:e.pos}]}if(this.isK("function")&&this.at("id",void 0,1)){this.next();let o=this.ident().value,a=this.params();this.expectP("=");let u=this.expr();return this.expectP(";"),[{kind:"function",name:o,params:a,body:u,pos:e.pos}]}if(this.isK("use")||this.isK("include")){this.next();let o=this.peek();return o.type!=="str"&&this.fail("Expected a library path like <kerf/box>"),this.next(),this.isP(";")&&this.next(),[{kind:"use",path:o.value,include:e.value==="include",pos:e.pos}]}if(this.isK("for"))return this.next(),[{kind:"for",assigns:this.assigns(),body:this.body(),pos:e.pos}];if(this.isK("if")){this.next(),this.expectP("(");let o=this.expr();this.expectP(")");let a=this.body(),u=[];return this.isK("else")&&(this.next(),u=this.body()),[{kind:"if",cond:o,then:a,else:u,pos:e.pos}]}if(this.isK("let")&&this.isP("(",1))return this.next(),[{kind:"let",assigns:this.assigns(),body:this.body(),pos:e.pos}];if(e.type==="id"&&this.isP("=",1)){let o=this.ident().value;this.next();let a=this.peek().pos.offset,u=this.expr(),l=this.expectP(";").pos.offset;return[{kind:"assign",name:o,value:u,span:[a,l],pos:e.pos}]}let r=null;(this.isP("*")||this.isP("!")||this.isP("#")||this.isP("%"))&&(r=this.next().value);let n=this.peek();(n.type!=="id"||Kr.has(n.value))&&this.fail("Expected a statement"),this.next();let s=this.args(),i=this.body();return[{kind:"call",name:n.value,args:s,children:i,modifier:r,pos:n.pos}]}body(){if(this.isP(";"))return this.next(),[];if(this.isP("{")){this.next();let e=[];for(;!this.isP("}");)this.at("eof")&&this.fail('Expected "}"'),e.push(...this.statement());return this.next(),e}return this.statement()}params(){this.expectP("(");let e=[];for(;!this.isP(")");){let r=this.ident().value,n=null;this.isP("=")&&(this.next(),n=this.expr()),e.push({name:r,default:n}),this.isP(")")||this.expectP(",")}return this.next(),e}args(){this.expectP("(");let e=[];for(;!this.isP(")");){let r=null;this.at("id")&&this.isP("=",1)&&(r=this.next().value,this.next()),e.push({name:r,value:this.expr()}),this.isP(")")||this.expectP(",")}return this.next(),e}assigns(){this.expectP("(");let e=[];for(;!this.isP(")");){let r=this.ident();this.expectP("="),e.push({name:r.value,value:this.expr(),pos:r.pos}),this.isP(")")||this.expectP(",")}return this.next(),e}expr(){let e=this.peek();if(this.isK("function")&&this.isP("(",1))return this.next(),{kind:"lambda",params:this.params(),body:this.expr(),pos:e.pos};if(this.isK("let")&&this.isP("(",1))return this.next(),{kind:"let",assigns:this.assigns(),body:this.expr(),pos:e.pos};let r=this.binary(0);if(this.isP("?")){this.next();let n=this.expr();this.expectP(":");let s=this.expr();return{kind:"ternary",cond:r,then:n,else:s,pos:e.pos}}return r}binary(e){if(e>=Nt.LEVELS.length)return this.unary();let r=this.binary(e+1);for(;this.at("punct")&&Nt.LEVELS[e].includes(this.peek().value);){let n=this.next(),s=this.binary(e+1);r={kind:"binary",op:n.value,left:r,right:s,pos:n.pos}}return r}unary(){if(this.isP("-")||this.isP("!")||this.isP("+")){let e=this.next();return{kind:"unary",op:e.value,arg:this.unary(),pos:e.pos}}return this.power()}power(){let e=this.postfix();if(this.isP("^")){let r=this.next();return{kind:"binary",op:"^",left:e,right:this.unary(),pos:r.pos}}return e}postfix(){let e=this.primary();for(;;){let r=this.peek();if(this.isP("("))e={kind:"call",callee:e,args:this.args(),pos:r.pos};else if(this.isP("[")){this.next();let n=this.expr();this.expectP("]"),e={kind:"index",target:e,index:n,pos:r.pos}}else if(this.isP("."))this.next(),e={kind:"member",target:e,name:this.ident().value,pos:r.pos};else return e}}primary(){let e=this.peek();if(e.type==="num")return this.next(),{kind:"num",value:Number(e.value),pos:e.pos};if(e.type==="str")return this.next(),{kind:"str",value:e.value,pos:e.pos};if(e.type==="id")return e.value==="true"||e.value==="false"?(this.next(),{kind:"bool",value:e.value==="true",pos:e.pos}):e.value==="undef"?(this.next(),{kind:"undef",pos:e.pos}):(Kr.has(e.value)&&this.fail("Expected a value"),this.next(),{kind:"var",name:e.value,pos:e.pos});if(this.isP("(")){this.next();let r=this.expr();return this.expectP(")"),r}if(this.isP("["))return this.list();this.fail("Expected a value")}list(){let e=this.expectP("[");if(this.isP("]"))return this.next(),{kind:"list",items:[],pos:e.pos};if(!this.isK("for")&&!this.isK("if")&&!this.isK("each")&&!(this.isK("let")&&this.isP("(",1))){let r=this.expr();if(this.isP(":")){this.next();let s=null,i=this.expr();return this.isP(":")&&(this.next(),s=i,i=this.expr()),this.expectP("]"),{kind:"range",start:r,step:s,end:i,pos:e.pos}}let n=[{kind:"item",expr:r}];return this.listRest(n,e.pos)}return this.listRest([],e.pos)}listRest(e,r){if(e.length){if(this.isP("]"))return this.next(),{kind:"list",items:e,pos:r};this.expectP(",")}for(;!this.isP("]");)e.push(this.listItem()),this.isP("]")||this.expectP(",");return this.next(),{kind:"list",items:e,pos:r}}listItem(){if(this.isK("for")&&this.isP("(",1))return this.next(),{kind:"for",assigns:this.assigns(),body:this.listItem()};if(this.isK("if")&&this.isP("(",1)){this.next(),this.expectP("(");let e=this.expr();this.expectP(")");let r=this.listItem(),n=null;return this.isK("else")&&(this.next(),n=this.listItem()),{kind:"if",cond:e,then:r,else:n}}if(this.isK("let")&&this.isP("(",1))return this.next(),{kind:"let",assigns:this.assigns(),body:this.listItem()};if(this.isK("each"))return this.next(),{kind:"each",expr:this.expr()};if(this.isP("(")&&(this.isK("for",1)||this.isK("if",1))){this.next();let e=this.listItem();return this.expectP(")"),e}return{kind:"item",expr:this.expr()}}};Nt.LEVELS=[["||"],["&&"],["==","!="],["<","<=",">",">="],["+","-"],["*","/","%"]];var Jr=Nt;var os={"kerf/box":`// kerf/box: finger-jointed boxes.
13
+ // Copyright (c) 2026 MyLaserTools. AGPL-3.0-only or MyLaserTools commercial licence.
14
+
15
+ // Box from its outer size [width, depth, height] in the current material.
16
+ // Edges pair "out" with "in", and the bottom owns every bottom corner,
17
+ // so the six panels interlock without gaps.
18
+ module box(size, lid = false, finger = undef) {
19
+ w = size[0];
20
+ d = size[1];
21
+ h = size[2];
22
+ top = lid ? "in" : "flat";
23
+ part("bottom") finger_rect([w, d], "out", finger = finger);
24
+ if (lid) part("lid") finger_rect([w, d], "out", finger = finger);
25
+ part("front") finger_rect([w, h], ["in", "out", top, "out"], finger = finger);
26
+ part("back") finger_rect([w, h], ["in", "out", top, "out"], finger = finger);
27
+ part("left") finger_rect([d, h], ["in", "in", top, "in"], finger = finger);
28
+ part("right") finger_rect([d, h], ["in", "in", top, "in"], finger = finger);
29
+ }
30
+
31
+ // Divider that slides between two walls: tabs on both sides drop into
32
+ // finger_holes() cut in the walls.
33
+ module divider(size, finger = undef) {
34
+ finger_rect(size, ["flat", "out", "flat", "out"], finger = finger);
35
+ }
36
+ `};function mr(t,e=.02){let r=[],n=[],s=[],i=[0,0],o=[0,0],a=l=>{s.length>=2&&(l?r:n).push(s),s=[]},u=l=>Math.max(2,Math.min(256,Math.ceil(Math.sqrt(l/e))));for(let l of t)if(l.type==="M")a(!1),i=o=[l.x,l.y],s=[o];else if(l.type==="L")o=[l.x,l.y],s.push(o);else if(l.type==="Q"){let[f,c]=o,h=u(Math.hypot(l.x1-f,l.y1-c)+Math.hypot(l.x-l.x1,l.y-l.y1));for(let p=1;p<=h;p++){let d=p/h,x=1-d;s.push([x*x*f+2*x*d*l.x1+d*d*l.x,x*x*c+2*x*d*l.y1+d*d*l.y])}o=[l.x,l.y]}else if(l.type==="C"){let[f,c]=o,h=u(Math.hypot(l.x1-f,l.y1-c)+Math.hypot(l.x2-l.x1,l.y2-l.y1)+Math.hypot(l.x-l.x2,l.y-l.y2));for(let p=1;p<=h;p++){let d=p/h,x=1-d;s.push([x*x*x*f+3*x*x*d*l.x1+3*x*d*d*l.x2+d*d*d*l.x,x*x*x*c+3*x*x*d*l.y1+3*x*d*d*l.y2+d*d*d*l.y])}o=[l.x,l.y]}else a(!0),o=i,s=[];return a(!1),{closed:r,open:n}}function as(t){let e=t.match(/[a-zA-Z]|[-+]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?/g)??[],r=[],n=0,s="",i=0,o=0,a=0,u=0,l=0,f=0,c=0,h=0,p="",d=()=>{let m=e[n++];if(m===void 0||/[a-zA-Z]/.test(m))throw new Error(`Bad path data near "${m??"end"}"`);return Number(m)},x=()=>{let m=e[n];if(m===void 0)throw new Error("Bad path data: missing arc flag");return m.length>1&&(m[0]==="0"||m[0]==="1")&&!m.includes(".")?(e[n]=m.slice(1),Number(m[0])):(n++,Number(m))};for(;n<e.length;){if(/[a-zA-Z]/.test(e[n]))s=e[n++];else if(!s)throw new Error("Path data must start with a command");let m=s===s.toLowerCase(),b=s.toUpperCase(),C=m?i:0,S=m?o:0;if(b==="M")i=C+d(),o=S+d(),a=i,u=o,r.push({type:"M",x:i,y:o}),s=m?"l":"L";else if(b==="L")i=C+d(),o=S+d(),r.push({type:"L",x:i,y:o});else if(b==="H")i=C+d(),r.push({type:"L",x:i,y:o});else if(b==="V")o=S+d(),r.push({type:"L",x:i,y:o});else if(b==="C"||b==="S"){let M,I;if(b==="C")M=C+d(),I=S+d();else{let P=p==="C"||p==="S";M=P?2*i-l:i,I=P?2*o-f:o}let X=C+d(),O=S+d();i=C+d(),o=S+d(),l=X,f=O,r.push({type:"C",x1:M,y1:I,x2:X,y2:O,x:i,y:o})}else if(b==="Q"||b==="T"){let M,I;if(b==="Q")M=C+d(),I=S+d();else{let X=p==="Q"||p==="T";M=X?2*i-c:i,I=X?2*o-h:o}i=C+d(),o=S+d(),c=M,h=I,r.push({type:"Q",x1:M,y1:I,x:i,y:o})}else if(b==="A"){let M=d(),I=d(),X=d(),O=x(),P=x(),W=C+d(),j=S+d();r.push(...Go(i,o,M,I,X,O,P,W,j)),i=W,o=j}else if(b==="Z")r.push({type:"Z"}),i=a,o=u;else throw new Error(`Unknown path command "${s}"`);p=b}return r}function Go(t,e,r,n,s,i,o,a,u){if(r===0||n===0||t===a&&e===u)return[{type:"L",x:a,y:u}];r=Math.abs(r),n=Math.abs(n);let l=s*Math.PI/180,f=Math.cos(l),c=Math.sin(l),h=(t-a)/2,p=(e-u)/2,d=f*h+c*p,x=-c*h+f*p,m=d*d/(r*r)+x*x/(n*n);m>1&&(r*=Math.sqrt(m),n*=Math.sqrt(m));let b=r*r*n*n-r*r*x*x-n*n*d*d,C=r*r*x*x+n*n*d*d,S=Math.sqrt(Math.max(0,b/C));i===o&&(S=-S);let M=S*r*x/n,I=-S*n*d/r,X=f*M-c*I+(t+a)/2,O=c*M+f*I+(e+u)/2,P=(k,F,A,R)=>Math.atan2(k*R-F*A,k*A+F*R),W=P(1,0,(d-M)/r,(x-I)/n),j=P((d-M)/r,(x-I)/n,(-d-M)/r,(-x-I)/n);!o&&j>0&&(j-=2*Math.PI),o&&j<0&&(j+=2*Math.PI);let se=Math.ceil(Math.abs(j)/(Math.PI/2)),le=[],pe=k=>[X+r*Math.cos(k)*f-n*Math.sin(k)*c,O+r*Math.cos(k)*c+n*Math.sin(k)*f],Q=k=>[-r*Math.sin(k)*f-n*Math.cos(k)*c,-r*Math.sin(k)*c+n*Math.cos(k)*f];for(let k=0;k<se;k++){let F=W+j*k/se,A=W+j*(k+1)/se,R=4/3*Math.tan((A-F)/4),N=pe(F),G=pe(A),B=Q(F),$=Q(A);le.push({type:"C",x1:N[0]+R*B[0],y1:N[1]+R*B[1],x2:G[0]-R*$[0],y2:G[1]-R*$[1],x:G[0],y:G[1]})}return le}String.prototype.codePointAt||(function(){var t=(function(){try{var r={},n=Object.defineProperty,s=n(r,r,r)&&n}catch{}return s})(),e=function(r){if(this==null)throw TypeError();var n=String(this),s=n.length,i=r?Number(r):0;if(i!=i&&(i=0),!(i<0||i>=s)){var o=n.charCodeAt(i),a;return o>=55296&&o<=56319&&s>i+1&&(a=n.charCodeAt(i+1),a>=56320&&a<=57343)?(o-55296)*1024+a-56320+65536:o}};t?t(String.prototype,"codePointAt",{value:e,configurable:!0,writable:!0}):String.prototype.codePointAt=e})();var xn=0,_s=-3;function Ht(){this.table=new Uint16Array(16),this.trans=new Uint16Array(288)}function Ho(t,e){this.source=t,this.sourceIndex=0,this.tag=0,this.bitcount=0,this.dest=e,this.destLen=0,this.ltree=new Ht,this.dtree=new Ht}var js=new Ht,Ks=new Ht,yn=new Uint8Array(30),bn=new Uint16Array(30),Js=new Uint8Array(30),Qs=new Uint16Array(30),zo=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),fs=new Ht,Ge=new Uint8Array(320);function ei(t,e,r,n){var s,i;for(s=0;s<r;++s)t[s]=0;for(s=0;s<30-r;++s)t[s+r]=s/r|0;for(i=n,s=0;s<30;++s)e[s]=i,i+=1<<t[s]}function Vo(t,e){var r;for(r=0;r<7;++r)t.table[r]=0;for(t.table[7]=24,t.table[8]=152,t.table[9]=112,r=0;r<24;++r)t.trans[r]=256+r;for(r=0;r<144;++r)t.trans[24+r]=r;for(r=0;r<8;++r)t.trans[168+r]=280+r;for(r=0;r<112;++r)t.trans[176+r]=144+r;for(r=0;r<5;++r)e.table[r]=0;for(e.table[5]=32,r=0;r<32;++r)e.trans[r]=r}var hs=new Uint16Array(16);function Qr(t,e,r,n){var s,i;for(s=0;s<16;++s)t.table[s]=0;for(s=0;s<n;++s)t.table[e[r+s]]++;for(t.table[0]=0,i=0,s=0;s<16;++s)hs[s]=i,i+=t.table[s];for(s=0;s<n;++s)e[r+s]&&(t.trans[hs[e[r+s]]++]=s)}function Xo(t){t.bitcount--||(t.tag=t.source[t.sourceIndex++],t.bitcount=7);var e=t.tag&1;return t.tag>>>=1,e}function He(t,e,r){if(!e)return r;for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<<t.bitcount,t.bitcount+=8;var n=t.tag&65535>>>16-e;return t.tag>>>=e,t.bitcount-=e,n+r}function ln(t,e){for(;t.bitcount<24;)t.tag|=t.source[t.sourceIndex++]<<t.bitcount,t.bitcount+=8;var r=0,n=0,s=0,i=t.tag;do n=2*n+(i&1),i>>>=1,++s,r+=e.table[s],n-=e.table[s];while(n>=0);return t.tag=i,t.bitcount-=s,e.trans[r+n]}function qo(t,e,r){var n,s,i,o,a,u;for(n=He(t,5,257),s=He(t,5,1),i=He(t,4,4),o=0;o<19;++o)Ge[o]=0;for(o=0;o<i;++o){var l=He(t,3,0);Ge[zo[o]]=l}for(Qr(fs,Ge,0,19),a=0;a<n+s;){var f=ln(t,fs);switch(f){case 16:var c=Ge[a-1];for(u=He(t,2,3);u;--u)Ge[a++]=c;break;case 17:for(u=He(t,3,3);u;--u)Ge[a++]=0;break;case 18:for(u=He(t,7,11);u;--u)Ge[a++]=0;break;default:Ge[a++]=f;break}}Qr(e,Ge,0,n),Qr(r,Ge,n,s)}function cs(t,e,r){for(;;){var n=ln(t,e);if(n===256)return xn;if(n<256)t.dest[t.destLen++]=n;else{var s,i,o,a;for(n-=257,s=He(t,yn[n],bn[n]),i=ln(t,r),o=t.destLen-He(t,Js[i],Qs[i]),a=o;a<o+s;++a)t.dest[t.destLen++]=t.dest[a]}}}function Wo(t){for(var e,r,n;t.bitcount>8;)t.sourceIndex--,t.bitcount-=8;if(e=t.source[t.sourceIndex+1],e=256*e+t.source[t.sourceIndex],r=t.source[t.sourceIndex+3],r=256*r+t.source[t.sourceIndex+2],e!==(~r&65535))return _s;for(t.sourceIndex+=4,n=e;n;--n)t.dest[t.destLen++]=t.source[t.sourceIndex++];return t.bitcount=0,xn}function $o(t,e){var r=new Ho(t,e),n,s,i;do{switch(n=Xo(r),s=He(r,2,0),s){case 0:i=Wo(r);break;case 1:i=cs(r,js,Ks);break;case 2:qo(r,r.ltree,r.dtree),i=cs(r,r.ltree,r.dtree);break;default:i=_s}if(i!==xn)throw new Error("Data error")}while(!n);return r.destLen<r.dest.length?typeof r.dest.slice=="function"?r.dest.slice(0,r.destLen):r.dest.subarray(0,r.destLen):r.dest}Vo(js,Ks);ei(yn,bn,4,3);ei(Js,Qs,2,1);yn[28]=0;bn[28]=258;var Zo=$o;function St(t,e,r,n,s){return Math.pow(1-s,3)*t+3*Math.pow(1-s,2)*s*e+3*(1-s)*Math.pow(s,2)*r+Math.pow(s,3)*n}function st(){this.x1=Number.NaN,this.y1=Number.NaN,this.x2=Number.NaN,this.y2=Number.NaN}st.prototype.isEmpty=function(){return isNaN(this.x1)||isNaN(this.y1)||isNaN(this.x2)||isNaN(this.y2)};st.prototype.addPoint=function(t,e){typeof t=="number"&&((isNaN(this.x1)||isNaN(this.x2))&&(this.x1=t,this.x2=t),t<this.x1&&(this.x1=t),t>this.x2&&(this.x2=t)),typeof e=="number"&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=e,this.y2=e),e<this.y1&&(this.y1=e),e>this.y2&&(this.y2=e))};st.prototype.addX=function(t){this.addPoint(t,null)};st.prototype.addY=function(t){this.addPoint(null,t)};st.prototype.addBezier=function(t,e,r,n,s,i,o,a){var u=[t,e],l=[r,n],f=[s,i],c=[o,a];this.addPoint(t,e),this.addPoint(o,a);for(var h=0;h<=1;h++){var p=6*u[h]-12*l[h]+6*f[h],d=-3*u[h]+9*l[h]-9*f[h]+3*c[h],x=3*l[h]-3*u[h];if(d===0){if(p===0)continue;var m=-x/p;0<m&&m<1&&(h===0&&this.addX(St(u[h],l[h],f[h],c[h],m)),h===1&&this.addY(St(u[h],l[h],f[h],c[h],m)));continue}var b=Math.pow(p,2)-4*x*d;if(!(b<0)){var C=(-p+Math.sqrt(b))/(2*d);0<C&&C<1&&(h===0&&this.addX(St(u[h],l[h],f[h],c[h],C)),h===1&&this.addY(St(u[h],l[h],f[h],c[h],C)));var S=(-p-Math.sqrt(b))/(2*d);0<S&&S<1&&(h===0&&this.addX(St(u[h],l[h],f[h],c[h],S)),h===1&&this.addY(St(u[h],l[h],f[h],c[h],S)))}}};st.prototype.addQuad=function(t,e,r,n,s,i){var o=t+.6666666666666666*(r-t),a=e+2/3*(n-e),u=o+1/3*(s-t),l=a+1/3*(i-e);this.addBezier(t,e,o,a,u,l,s,i)};function ue(){this.commands=[],this.fill="black",this.stroke=null,this.strokeWidth=1}ue.prototype.moveTo=function(t,e){this.commands.push({type:"M",x:t,y:e})};ue.prototype.lineTo=function(t,e){this.commands.push({type:"L",x:t,y:e})};ue.prototype.curveTo=ue.prototype.bezierCurveTo=function(t,e,r,n,s,i){this.commands.push({type:"C",x1:t,y1:e,x2:r,y2:n,x:s,y:i})};ue.prototype.quadTo=ue.prototype.quadraticCurveTo=function(t,e,r,n){this.commands.push({type:"Q",x1:t,y1:e,x:r,y:n})};ue.prototype.close=ue.prototype.closePath=function(){this.commands.push({type:"Z"})};ue.prototype.extend=function(t){if(t.commands)t=t.commands;else if(t instanceof st){var e=t;this.moveTo(e.x1,e.y1),this.lineTo(e.x2,e.y1),this.lineTo(e.x2,e.y2),this.lineTo(e.x1,e.y2),this.close();return}Array.prototype.push.apply(this.commands,t)};ue.prototype.getBoundingBox=function(){for(var t=new st,e=0,r=0,n=0,s=0,i=0;i<this.commands.length;i++){var o=this.commands[i];switch(o.type){case"M":t.addPoint(o.x,o.y),e=n=o.x,r=s=o.y;break;case"L":t.addPoint(o.x,o.y),n=o.x,s=o.y;break;case"Q":t.addQuad(n,s,o.x1,o.y1,o.x,o.y),n=o.x,s=o.y;break;case"C":t.addBezier(n,s,o.x1,o.y1,o.x2,o.y2,o.x,o.y),n=o.x,s=o.y;break;case"Z":n=e,s=r;break;default:throw new Error("Unexpected path command "+o.type)}}return t.isEmpty()&&t.addPoint(0,0),t};ue.prototype.draw=function(t){t.beginPath();for(var e=0;e<this.commands.length;e+=1){var r=this.commands[e];r.type==="M"?t.moveTo(r.x,r.y):r.type==="L"?t.lineTo(r.x,r.y):r.type==="C"?t.bezierCurveTo(r.x1,r.y1,r.x2,r.y2,r.x,r.y):r.type==="Q"?t.quadraticCurveTo(r.x1,r.y1,r.x,r.y):r.type==="Z"&&t.closePath()}this.fill&&(t.fillStyle=this.fill,t.fill()),this.stroke&&(t.strokeStyle=this.stroke,t.lineWidth=this.strokeWidth,t.stroke())};ue.prototype.toPathData=function(t){t=t!==void 0?t:2;function e(o){return Math.round(o)===o?""+Math.round(o):o.toFixed(t)}function r(){for(var o=arguments,a="",u=0;u<arguments.length;u+=1){var l=o[u];l>=0&&u>0&&(a+=" "),a+=e(l)}return a}for(var n="",s=0;s<this.commands.length;s+=1){var i=this.commands[s];i.type==="M"?n+="M"+r(i.x,i.y):i.type==="L"?n+="L"+r(i.x,i.y):i.type==="C"?n+="C"+r(i.x1,i.y1,i.x2,i.y2,i.x,i.y):i.type==="Q"?n+="Q"+r(i.x1,i.y1,i.x,i.y):i.type==="Z"&&(n+="Z")}return n};ue.prototype.toSVG=function(t){var e='<path d="';return e+=this.toPathData(t),e+='"',this.fill&&this.fill!=="black"&&(this.fill===null?e+=' fill="none"':e+=' fill="'+this.fill+'"'),this.stroke&&(e+=' stroke="'+this.stroke+'" stroke-width="'+this.strokeWidth+'"'),e+="/>",e};ue.prototype.toDOMElement=function(t){var e=this.toPathData(t),r=document.createElementNS("http://www.w3.org/2000/svg","path");return r.setAttribute("d",e),r};function ti(t){throw new Error(t)}function ps(t,e){t||ti(e)}var D={fail:ti,argument:ps,assert:ps},ds=32768,gs=2147483648,Et={},E={},U={};function De(t){return function(){return t}}E.BYTE=function(t){return D.argument(t>=0&&t<=255,"Byte value should be between 0 and 255."),[t]};U.BYTE=De(1);E.CHAR=function(t){return[t.charCodeAt(0)]};U.CHAR=De(1);E.CHARARRAY=function(t){typeof t>"u"&&(t="",console.warn("Undefined CHARARRAY encountered and treated as an empty string. This is probably caused by a missing glyph name."));for(var e=[],r=0;r<t.length;r+=1)e[r]=t.charCodeAt(r);return e};U.CHARARRAY=function(t){return typeof t>"u"?0:t.length};E.USHORT=function(t){return[t>>8&255,t&255]};U.USHORT=De(2);E.SHORT=function(t){return t>=ds&&(t=-(2*ds-t)),[t>>8&255,t&255]};U.SHORT=De(2);E.UINT24=function(t){return[t>>16&255,t>>8&255,t&255]};U.UINT24=De(3);E.ULONG=function(t){return[t>>24&255,t>>16&255,t>>8&255,t&255]};U.ULONG=De(4);E.LONG=function(t){return t>=gs&&(t=-(2*gs-t)),[t>>24&255,t>>16&255,t>>8&255,t&255]};U.LONG=De(4);E.FIXED=E.ULONG;U.FIXED=U.ULONG;E.FWORD=E.SHORT;U.FWORD=U.SHORT;E.UFWORD=E.USHORT;U.UFWORD=U.USHORT;E.LONGDATETIME=function(t){return[0,0,0,0,t>>24&255,t>>16&255,t>>8&255,t&255]};U.LONGDATETIME=De(8);E.TAG=function(t){return D.argument(t.length===4,"Tag should be exactly 4 ASCII characters."),[t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2),t.charCodeAt(3)]};U.TAG=De(4);E.Card8=E.BYTE;U.Card8=U.BYTE;E.Card16=E.USHORT;U.Card16=U.USHORT;E.OffSize=E.BYTE;U.OffSize=U.BYTE;E.SID=E.USHORT;U.SID=U.USHORT;E.NUMBER=function(t){return t>=-107&&t<=107?[t+139]:t>=108&&t<=1131?(t=t-108,[(t>>8)+247,t&255]):t>=-1131&&t<=-108?(t=-t-108,[(t>>8)+251,t&255]):t>=-32768&&t<=32767?E.NUMBER16(t):E.NUMBER32(t)};U.NUMBER=function(t){return E.NUMBER(t).length};E.NUMBER16=function(t){return[28,t>>8&255,t&255]};U.NUMBER16=De(3);E.NUMBER32=function(t){return[29,t>>24&255,t>>16&255,t>>8&255,t&255]};U.NUMBER32=De(5);E.REAL=function(t){var e=t.toString(),r=/\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(e);if(r){var n=parseFloat("1e"+((r[2]?+r[2]:0)+r[1].length));e=(Math.round(t*n)/n).toString()}for(var s="",i=0,o=e.length;i<o;i+=1){var a=e[i];a==="e"?s+=e[++i]==="-"?"c":"b":a==="."?s+="a":a==="-"?s+="e":s+=a}s+=s.length&1?"f":"ff";for(var u=[30],l=0,f=s.length;l<f;l+=2)u.push(parseInt(s.substr(l,2),16));return u};U.REAL=function(t){return E.REAL(t).length};E.NAME=E.CHARARRAY;U.NAME=U.CHARARRAY;E.STRING=E.CHARARRAY;U.STRING=U.CHARARRAY;Et.UTF8=function(t,e,r){for(var n=[],s=r,i=0;i<s;i++,e+=1)n[i]=t.getUint8(e);return String.fromCharCode.apply(null,n)};Et.UTF16=function(t,e,r){for(var n=[],s=r/2,i=0;i<s;i++,e+=2)n[i]=t.getUint16(e);return String.fromCharCode.apply(null,n)};E.UTF16=function(t){for(var e=[],r=0;r<t.length;r+=1){var n=t.charCodeAt(r);e[e.length]=n>>8&255,e[e.length]=n&255}return e};U.UTF16=function(t){return t.length*2};var fn={"x-mac-croatian":"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\u0160\u2122\xB4\xA8\u2260\u017D\xD8\u221E\xB1\u2264\u2265\u2206\xB5\u2202\u2211\u220F\u0161\u222B\xAA\xBA\u03A9\u017E\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u0106\xAB\u010C\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u0110\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\uF8FF\xA9\u2044\u20AC\u2039\u203A\xC6\xBB\u2013\xB7\u201A\u201E\u2030\xC2\u0107\xC1\u010D\xC8\xCD\xCE\xCF\xCC\xD3\xD4\u0111\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u03C0\xCB\u02DA\xB8\xCA\xE6\u02C7","x-mac-cyrillic":"\u0410\u0411\u0412\u0413\u0414\u0415\u0416\u0417\u0418\u0419\u041A\u041B\u041C\u041D\u041E\u041F\u0420\u0421\u0422\u0423\u0424\u0425\u0426\u0427\u0428\u0429\u042A\u042B\u042C\u042D\u042E\u042F\u2020\xB0\u0490\xA3\xA7\u2022\xB6\u0406\xAE\xA9\u2122\u0402\u0452\u2260\u0403\u0453\u221E\xB1\u2264\u2265\u0456\xB5\u0491\u0408\u0404\u0454\u0407\u0457\u0409\u0459\u040A\u045A\u0458\u0405\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\u040B\u045B\u040C\u045C\u0455\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u201E\u040E\u045E\u040F\u045F\u2116\u0401\u0451\u044F\u0430\u0431\u0432\u0433\u0434\u0435\u0436\u0437\u0438\u0439\u043A\u043B\u043C\u043D\u043E\u043F\u0440\u0441\u0442\u0443\u0444\u0445\u0446\u0447\u0448\u0449\u044A\u044B\u044C\u044D\u044E","x-mac-gaelic":"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u1E02\xB1\u2264\u2265\u1E03\u010A\u010B\u1E0A\u1E0B\u1E1E\u1E1F\u0120\u0121\u1E40\xE6\xF8\u1E41\u1E56\u1E57\u027C\u0192\u017F\u1E60\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\u1E61\u1E9B\xFF\u0178\u1E6A\u20AC\u2039\u203A\u0176\u0177\u1E6B\xB7\u1EF2\u1EF3\u204A\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\u2663\xD2\xDA\xDB\xD9\u0131\xDD\xFD\u0174\u0175\u1E84\u1E85\u1E80\u1E81\u1E82\u1E83","x-mac-greek":"\xC4\xB9\xB2\xC9\xB3\xD6\xDC\u0385\xE0\xE2\xE4\u0384\xA8\xE7\xE9\xE8\xEA\xEB\xA3\u2122\xEE\xEF\u2022\xBD\u2030\xF4\xF6\xA6\u20AC\xF9\xFB\xFC\u2020\u0393\u0394\u0398\u039B\u039E\u03A0\xDF\xAE\xA9\u03A3\u03AA\xA7\u2260\xB0\xB7\u0391\xB1\u2264\u2265\xA5\u0392\u0395\u0396\u0397\u0399\u039A\u039C\u03A6\u03AB\u03A8\u03A9\u03AC\u039D\xAC\u039F\u03A1\u2248\u03A4\xAB\xBB\u2026\xA0\u03A5\u03A7\u0386\u0388\u0153\u2013\u2015\u201C\u201D\u2018\u2019\xF7\u0389\u038A\u038C\u038E\u03AD\u03AE\u03AF\u03CC\u038F\u03CD\u03B1\u03B2\u03C8\u03B4\u03B5\u03C6\u03B3\u03B7\u03B9\u03BE\u03BA\u03BB\u03BC\u03BD\u03BF\u03C0\u03CE\u03C1\u03C3\u03C4\u03B8\u03C9\u03C2\u03C7\u03C5\u03B6\u03CA\u03CB\u0390\u03B0\xAD","x-mac-icelandic":"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\xDD\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u03A9\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\u20AC\xD0\xF0\xDE\xFE\xFD\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uF8FF\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7","x-mac-inuit":"\u1403\u1404\u1405\u1406\u140A\u140B\u1431\u1432\u1433\u1434\u1438\u1439\u1449\u144E\u144F\u1450\u1451\u1455\u1456\u1466\u146D\u146E\u146F\u1470\u1472\u1473\u1483\u148B\u148C\u148D\u148E\u1490\u1491\xB0\u14A1\u14A5\u14A6\u2022\xB6\u14A7\xAE\xA9\u2122\u14A8\u14AA\u14AB\u14BB\u14C2\u14C3\u14C4\u14C5\u14C7\u14C8\u14D0\u14EF\u14F0\u14F1\u14F2\u14F4\u14F5\u1505\u14D5\u14D6\u14D7\u14D8\u14DA\u14DB\u14EA\u1528\u1529\u152A\u152B\u152D\u2026\xA0\u152E\u153E\u1555\u1556\u1557\u2013\u2014\u201C\u201D\u2018\u2019\u1558\u1559\u155A\u155D\u1546\u1547\u1548\u1549\u154B\u154C\u1550\u157F\u1580\u1581\u1582\u1583\u1584\u1585\u158F\u1590\u1591\u1592\u1593\u1594\u1595\u1671\u1672\u1673\u1674\u1675\u1676\u1596\u15A0\u15A1\u15A2\u15A3\u15A4\u15A5\u15A6\u157C\u0141\u0142","x-mac-ce":"\xC4\u0100\u0101\xC9\u0104\xD6\xDC\xE1\u0105\u010C\xE4\u010D\u0106\u0107\xE9\u0179\u017A\u010E\xED\u010F\u0112\u0113\u0116\xF3\u0117\xF4\xF6\xF5\xFA\u011A\u011B\xFC\u2020\xB0\u0118\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\u0119\xA8\u2260\u0123\u012E\u012F\u012A\u2264\u2265\u012B\u0136\u2202\u2211\u0142\u013B\u013C\u013D\u013E\u0139\u013A\u0145\u0146\u0143\xAC\u221A\u0144\u0147\u2206\xAB\xBB\u2026\xA0\u0148\u0150\xD5\u0151\u014C\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\u014D\u0154\u0155\u0158\u2039\u203A\u0159\u0156\u0157\u0160\u201A\u201E\u0161\u015A\u015B\xC1\u0164\u0165\xCD\u017D\u017E\u016A\xD3\xD4\u016B\u016E\xDA\u016F\u0170\u0171\u0172\u0173\xDD\xFD\u0137\u017B\u0141\u017C\u0122\u02C7",macintosh:"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u03A9\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\u20AC\u2039\u203A\uFB01\uFB02\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uF8FF\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7","x-mac-romanian":"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\u0102\u0218\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u03A9\u0103\u0219\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u2044\u20AC\u2039\u203A\u021A\u021B\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uF8FF\xD2\xDA\xDB\xD9\u0131\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7","x-mac-turkish":"\xC4\xC5\xC7\xC9\xD1\xD6\xDC\xE1\xE0\xE2\xE4\xE3\xE5\xE7\xE9\xE8\xEA\xEB\xED\xEC\xEE\xEF\xF1\xF3\xF2\xF4\xF6\xF5\xFA\xF9\xFB\xFC\u2020\xB0\xA2\xA3\xA7\u2022\xB6\xDF\xAE\xA9\u2122\xB4\xA8\u2260\xC6\xD8\u221E\xB1\u2264\u2265\xA5\xB5\u2202\u2211\u220F\u03C0\u222B\xAA\xBA\u03A9\xE6\xF8\xBF\xA1\xAC\u221A\u0192\u2248\u2206\xAB\xBB\u2026\xA0\xC0\xC3\xD5\u0152\u0153\u2013\u2014\u201C\u201D\u2018\u2019\xF7\u25CA\xFF\u0178\u011E\u011F\u0130\u0131\u015E\u015F\u2021\xB7\u201A\u201E\u2030\xC2\xCA\xC1\xCB\xC8\xCD\xCE\xCF\xCC\xD3\xD4\uF8FF\xD2\xDA\xDB\xD9\uF8A0\u02C6\u02DC\xAF\u02D8\u02D9\u02DA\xB8\u02DD\u02DB\u02C7"};Et.MACSTRING=function(t,e,r,n){var s=fn[n];if(s!==void 0){for(var i="",o=0;o<r;o++){var a=t.getUint8(e+o);a<=127?i+=String.fromCharCode(a):i+=s[a&127]}return i}};var xr=typeof WeakMap=="function"&&new WeakMap,yr,Yo=function(t){if(!yr){yr={};for(var e in fn)yr[e]=new String(e)}var r=yr[t];if(r!==void 0){if(xr){var n=xr.get(r);if(n!==void 0)return n}var s=fn[t];if(s!==void 0){for(var i={},o=0;o<s.length;o++)i[s.charCodeAt(o)]=o+128;return xr&&xr.set(r,i),i}}};E.MACSTRING=function(t,e){var r=Yo(e);if(r!==void 0){for(var n=[],s=0;s<t.length;s++){var i=t.charCodeAt(s);if(i>=128&&(i=r[i],i===void 0))return;n[s]=i}return n}};U.MACSTRING=function(t,e){var r=E.MACSTRING(t,e);return r!==void 0?r.length:0};function hn(t){return t>=-128&&t<=127}function _o(t,e,r){for(var n=0,s=t.length;e<s&&n<64&&t[e]===0;)++e,++n;return r.push(128|n-1),e}function jo(t,e,r){for(var n=0,s=t.length,i=e;i<s&&n<64;){var o=t[i];if(!hn(o)||o===0&&i+1<s&&t[i+1]===0)break;++i,++n}r.push(n-1);for(var a=e;a<i;++a)r.push(t[a]+256&255);return i}function Ko(t,e,r){for(var n=0,s=t.length,i=e;i<s&&n<64;){var o=t[i];if(o===0||hn(o)&&i+1<s&&hn(t[i+1]))break;++i,++n}r.push(64|n-1);for(var a=e;a<i;++a){var u=t[a];r.push(u+65536>>8&255,u+256&255)}return i}E.VARDELTAS=function(t){for(var e=0,r=[];e<t.length;){var n=t[e];n===0?e=_o(t,e,r):n>=-128&&n<=127?e=jo(t,e,r):e=Ko(t,e,r)}return r};E.INDEX=function(t){for(var e=1,r=[e],n=[],s=0;s<t.length;s+=1){var i=E.OBJECT(t[s]);Array.prototype.push.apply(n,i),e+=i.length,r.push(e)}if(n.length===0)return[0,0];for(var o=[],a=1+Math.floor(Math.log(e)/Math.log(2))/8|0,u=[void 0,E.BYTE,E.USHORT,E.UINT24,E.ULONG][a],l=0;l<r.length;l+=1){var f=u(r[l]);Array.prototype.push.apply(o,f)}return Array.prototype.concat(E.Card16(t.length),E.OffSize(a),o,n)};U.INDEX=function(t){return E.INDEX(t).length};E.DICT=function(t){for(var e=[],r=Object.keys(t),n=r.length,s=0;s<n;s+=1){var i=parseInt(r[s],0),o=t[i];e=e.concat(E.OPERAND(o.value,o.type)),e=e.concat(E.OPERATOR(i))}return e};U.DICT=function(t){return E.DICT(t).length};E.OPERATOR=function(t){return t<1200?[t]:[12,t-1200]};E.OPERAND=function(t,e){var r=[];if(Array.isArray(e))for(var n=0;n<e.length;n+=1)D.argument(t.length===e.length,"Not enough arguments given for type"+e),r=r.concat(E.OPERAND(t[n],e[n]));else if(e==="SID")r=r.concat(E.NUMBER(t));else if(e==="offset")r=r.concat(E.NUMBER32(t));else if(e==="number")r=r.concat(E.NUMBER(t));else if(e==="real")r=r.concat(E.REAL(t));else throw new Error("Unknown operand type "+e);return r};E.OP=E.BYTE;U.OP=U.BYTE;var br=typeof WeakMap=="function"&&new WeakMap;E.CHARSTRING=function(t){if(br){var e=br.get(t);if(e!==void 0)return e}for(var r=[],n=t.length,s=0;s<n;s+=1){var i=t[s];r=r.concat(E[i.type](i.value))}return br&&br.set(t,r),r};U.CHARSTRING=function(t){return E.CHARSTRING(t).length};E.OBJECT=function(t){var e=E[t.type];return D.argument(e!==void 0,"No encoding function for type "+t.type),e(t.value)};U.OBJECT=function(t){var e=U[t.type];return D.argument(e!==void 0,"No sizeOf function for type "+t.type),e(t.value)};E.TABLE=function(t){for(var e=[],r=t.fields.length,n=[],s=[],i=0;i<r;i+=1){var o=t.fields[i],a=E[o.type];D.argument(a!==void 0,"No encoding function for field type "+o.type+" ("+o.name+")");var u=t[o.name];u===void 0&&(u=o.value);var l=a(u);o.type==="TABLE"?(s.push(e.length),e=e.concat([0,0]),n.push(l)):e=e.concat(l)}for(var f=0;f<n.length;f+=1){var c=s[f],h=e.length;D.argument(h<65536,"Table "+t.tableName+" too big."),e[c]=h>>8,e[c+1]=h&255,e=e.concat(n[f])}return e};U.TABLE=function(t){for(var e=0,r=t.fields.length,n=0;n<r;n+=1){var s=t.fields[n],i=U[s.type];D.argument(i!==void 0,"No sizeOf function for field type "+s.type+" ("+s.name+")");var o=t[s.name];o===void 0&&(o=s.value),e+=i(o),s.type==="TABLE"&&(e+=2)}return e};E.RECORD=E.TABLE;U.RECORD=U.TABLE;E.LITERAL=function(t){return t};U.LITERAL=function(t){return t.length};function he(t,e,r){if(e.length&&(e[0].name!=="coverageFormat"||e[0].value===1))for(var n=0;n<e.length;n+=1){var s=e[n];this[s.name]=s.value}if(this.tableName=t,this.fields=e,r)for(var i=Object.keys(r),o=0;o<i.length;o+=1){var a=i[o],u=r[a];this[a]!==void 0&&(this[a]=u)}}he.prototype.encode=function(){return E.TABLE(this)};he.prototype.sizeOf=function(){return U.TABLE(this)};function zt(t,e,r){r===void 0&&(r=e.length);var n=new Array(e.length+1);n[0]={name:t+"Count",type:"USHORT",value:r};for(var s=0;s<e.length;s++)n[s+1]={name:t+s,type:"USHORT",value:e[s]};return n}function cn(t,e,r){var n=e.length,s=new Array(n+1);s[0]={name:t+"Count",type:"USHORT",value:n};for(var i=0;i<n;i++)s[i+1]={name:t+i,type:"TABLE",value:r(e[i],i)};return s}function Vt(t,e,r){var n=e.length,s=[];s[0]={name:t+"Count",type:"USHORT",value:n};for(var i=0;i<n;i++)s=s.concat(r(e[i],i));return s}function Pr(t){t.format===1?he.call(this,"coverageTable",[{name:"coverageFormat",type:"USHORT",value:1}].concat(zt("glyph",t.glyphs))):t.format===2?he.call(this,"coverageTable",[{name:"coverageFormat",type:"USHORT",value:2}].concat(Vt("rangeRecord",t.ranges,function(e){return[{name:"startGlyphID",type:"USHORT",value:e.start},{name:"endGlyphID",type:"USHORT",value:e.end},{name:"startCoverageIndex",type:"USHORT",value:e.index}]}))):D.assert(!1,"Coverage format must be 1 or 2.")}Pr.prototype=Object.create(he.prototype);Pr.prototype.constructor=Pr;function Ir(t){he.call(this,"scriptListTable",Vt("scriptRecord",t,function(e,r){var n=e.script,s=n.defaultLangSys;return D.assert(!!s,"Unable to write GSUB: script "+e.tag+" has no default language system."),[{name:"scriptTag"+r,type:"TAG",value:e.tag},{name:"script"+r,type:"TABLE",value:new he("scriptTable",[{name:"defaultLangSys",type:"TABLE",value:new he("defaultLangSys",[{name:"lookupOrder",type:"USHORT",value:0},{name:"reqFeatureIndex",type:"USHORT",value:s.reqFeatureIndex}].concat(zt("featureIndex",s.featureIndexes)))}].concat(Vt("langSys",n.langSysRecords,function(i,o){var a=i.langSys;return[{name:"langSysTag"+o,type:"TAG",value:i.tag},{name:"langSys"+o,type:"TABLE",value:new he("langSys",[{name:"lookupOrder",type:"USHORT",value:0},{name:"reqFeatureIndex",type:"USHORT",value:a.reqFeatureIndex}].concat(zt("featureIndex",a.featureIndexes)))}]})))}]}))}Ir.prototype=Object.create(he.prototype);Ir.prototype.constructor=Ir;function Lr(t){he.call(this,"featureListTable",Vt("featureRecord",t,function(e,r){var n=e.feature;return[{name:"featureTag"+r,type:"TAG",value:e.tag},{name:"feature"+r,type:"TABLE",value:new he("featureTable",[{name:"featureParams",type:"USHORT",value:n.featureParams}].concat(zt("lookupListIndex",n.lookupListIndexes)))}]}))}Lr.prototype=Object.create(he.prototype);Lr.prototype.constructor=Lr;function Tr(t,e){he.call(this,"lookupListTable",cn("lookup",t,function(r){var n=e[r.lookupType];return D.assert(!!n,"Unable to write GSUB lookup type "+r.lookupType+" tables."),new he("lookupTable",[{name:"lookupType",type:"USHORT",value:r.lookupType},{name:"lookupFlag",type:"USHORT",value:r.lookupFlag}].concat(cn("subtable",r.subtables,n)))}))}Tr.prototype=Object.create(he.prototype);Tr.prototype.constructor=Tr;var w={Table:he,Record:he,Coverage:Pr,ScriptList:Ir,FeatureList:Lr,LookupList:Tr,ushortList:zt,tableList:cn,recordList:Vt};function vs(t,e){return t.getUint8(e)}function Cr(t,e){return t.getUint16(e,!1)}function Jo(t,e){return t.getInt16(e,!1)}function Sn(t,e){return t.getUint32(e,!1)}function ri(t,e){var r=t.getInt16(e,!1),n=t.getUint16(e+2,!1);return r+n/65535}function Qo(t,e){for(var r="",n=e;n<e+4;n+=1)r+=String.fromCharCode(t.getInt8(n));return r}function ea(t,e,r){for(var n=0,s=0;s<r;s+=1)n<<=8,n+=t.getUint8(e+s);return n}function ta(t,e,r){for(var n=[],s=e;s<r;s+=1)n.push(t.getUint8(s));return n}function ra(t){for(var e="",r=0;r<t.length;r+=1)e+=String.fromCharCode(t[r]);return e}var na={byte:1,uShort:2,short:2,uLong:4,fixed:4,longDateTime:8,tag:4};function v(t,e){this.data=t,this.offset=e,this.relativeOffset=0}v.prototype.parseByte=function(){var t=this.data.getUint8(this.offset+this.relativeOffset);return this.relativeOffset+=1,t};v.prototype.parseChar=function(){var t=this.data.getInt8(this.offset+this.relativeOffset);return this.relativeOffset+=1,t};v.prototype.parseCard8=v.prototype.parseByte;v.prototype.parseUShort=function(){var t=this.data.getUint16(this.offset+this.relativeOffset);return this.relativeOffset+=2,t};v.prototype.parseCard16=v.prototype.parseUShort;v.prototype.parseSID=v.prototype.parseUShort;v.prototype.parseOffset16=v.prototype.parseUShort;v.prototype.parseShort=function(){var t=this.data.getInt16(this.offset+this.relativeOffset);return this.relativeOffset+=2,t};v.prototype.parseF2Dot14=function(){var t=this.data.getInt16(this.offset+this.relativeOffset)/16384;return this.relativeOffset+=2,t};v.prototype.parseULong=function(){var t=Sn(this.data,this.offset+this.relativeOffset);return this.relativeOffset+=4,t};v.prototype.parseOffset32=v.prototype.parseULong;v.prototype.parseFixed=function(){var t=ri(this.data,this.offset+this.relativeOffset);return this.relativeOffset+=4,t};v.prototype.parseString=function(t){var e=this.data,r=this.offset+this.relativeOffset,n="";this.relativeOffset+=t;for(var s=0;s<t;s++)n+=String.fromCharCode(e.getUint8(r+s));return n};v.prototype.parseTag=function(){return this.parseString(4)};v.prototype.parseLongDateTime=function(){var t=Sn(this.data,this.offset+this.relativeOffset+4);return t-=2082844800,this.relativeOffset+=8,t};v.prototype.parseVersion=function(t){var e=Cr(this.data,this.offset+this.relativeOffset),r=Cr(this.data,this.offset+this.relativeOffset+2);return this.relativeOffset+=4,t===void 0&&(t=4096),e+r/t/10};v.prototype.skip=function(t,e){e===void 0&&(e=1),this.relativeOffset+=na[t]*e};v.prototype.parseULongList=function(t){t===void 0&&(t=this.parseULong());for(var e=new Array(t),r=this.data,n=this.offset+this.relativeOffset,s=0;s<t;s++)e[s]=r.getUint32(n),n+=4;return this.relativeOffset+=t*4,e};v.prototype.parseOffset16List=v.prototype.parseUShortList=function(t){t===void 0&&(t=this.parseUShort());for(var e=new Array(t),r=this.data,n=this.offset+this.relativeOffset,s=0;s<t;s++)e[s]=r.getUint16(n),n+=2;return this.relativeOffset+=t*2,e};v.prototype.parseShortList=function(t){for(var e=new Array(t),r=this.data,n=this.offset+this.relativeOffset,s=0;s<t;s++)e[s]=r.getInt16(n),n+=2;return this.relativeOffset+=t*2,e};v.prototype.parseByteList=function(t){for(var e=new Array(t),r=this.data,n=this.offset+this.relativeOffset,s=0;s<t;s++)e[s]=r.getUint8(n++);return this.relativeOffset+=t,e};v.prototype.parseList=function(t,e){e||(e=t,t=this.parseUShort());for(var r=new Array(t),n=0;n<t;n++)r[n]=e.call(this);return r};v.prototype.parseList32=function(t,e){e||(e=t,t=this.parseULong());for(var r=new Array(t),n=0;n<t;n++)r[n]=e.call(this);return r};v.prototype.parseRecordList=function(t,e){e||(e=t,t=this.parseUShort());for(var r=new Array(t),n=Object.keys(e),s=0;s<t;s++){for(var i={},o=0;o<n.length;o++){var a=n[o],u=e[a];i[a]=u.call(this)}r[s]=i}return r};v.prototype.parseRecordList32=function(t,e){e||(e=t,t=this.parseULong());for(var r=new Array(t),n=Object.keys(e),s=0;s<t;s++){for(var i={},o=0;o<n.length;o++){var a=n[o],u=e[a];i[a]=u.call(this)}r[s]=i}return r};v.prototype.parseStruct=function(t){if(typeof t=="function")return t.call(this);for(var e=Object.keys(t),r={},n=0;n<e.length;n++){var s=e[n],i=t[s];r[s]=i.call(this)}return r};v.prototype.parseValueRecord=function(t){if(t===void 0&&(t=this.parseUShort()),t!==0){var e={};return t&1&&(e.xPlacement=this.parseShort()),t&2&&(e.yPlacement=this.parseShort()),t&4&&(e.xAdvance=this.parseShort()),t&8&&(e.yAdvance=this.parseShort()),t&16&&(e.xPlaDevice=void 0,this.parseShort()),t&32&&(e.yPlaDevice=void 0,this.parseShort()),t&64&&(e.xAdvDevice=void 0,this.parseShort()),t&128&&(e.yAdvDevice=void 0,this.parseShort()),e}};v.prototype.parseValueRecordList=function(){for(var t=this.parseUShort(),e=this.parseUShort(),r=new Array(e),n=0;n<e;n++)r[n]=this.parseValueRecord(t);return r};v.prototype.parsePointer=function(t){var e=this.parseOffset16();if(e>0)return new v(this.data,this.offset+e).parseStruct(t)};v.prototype.parsePointer32=function(t){var e=this.parseOffset32();if(e>0)return new v(this.data,this.offset+e).parseStruct(t)};v.prototype.parseListOfLists=function(t){for(var e=this.parseOffset16List(),r=e.length,n=this.relativeOffset,s=new Array(r),i=0;i<r;i++){var o=e[i];if(o===0){s[i]=void 0;continue}if(this.relativeOffset=o,t){for(var a=this.parseOffset16List(),u=new Array(a.length),l=0;l<a.length;l++)this.relativeOffset=o+a[l],u[l]=t.call(this);s[i]=u}else s[i]=this.parseUShortList()}return this.relativeOffset=n,s};v.prototype.parseCoverage=function(){var t=this.offset+this.relativeOffset,e=this.parseUShort(),r=this.parseUShort();if(e===1)return{format:1,glyphs:this.parseUShortList(r)};if(e===2){for(var n=new Array(r),s=0;s<r;s++)n[s]={start:this.parseUShort(),end:this.parseUShort(),index:this.parseUShort()};return{format:2,ranges:n}}throw new Error("0x"+t.toString(16)+": Coverage format must be 1 or 2.")};v.prototype.parseClassDef=function(){var t=this.offset+this.relativeOffset,e=this.parseUShort();if(e===1)return{format:1,startGlyph:this.parseUShort(),classes:this.parseUShortList()};if(e===2)return{format:2,ranges:this.parseRecordList({start:v.uShort,end:v.uShort,classId:v.uShort})};throw new Error("0x"+t.toString(16)+": ClassDef format must be 1 or 2.")};v.list=function(t,e){return function(){return this.parseList(t,e)}};v.list32=function(t,e){return function(){return this.parseList32(t,e)}};v.recordList=function(t,e){return function(){return this.parseRecordList(t,e)}};v.recordList32=function(t,e){return function(){return this.parseRecordList32(t,e)}};v.pointer=function(t){return function(){return this.parsePointer(t)}};v.pointer32=function(t){return function(){return this.parsePointer32(t)}};v.tag=v.prototype.parseTag;v.byte=v.prototype.parseByte;v.uShort=v.offset16=v.prototype.parseUShort;v.uShortList=v.prototype.parseUShortList;v.uLong=v.offset32=v.prototype.parseULong;v.uLongList=v.prototype.parseULongList;v.struct=v.prototype.parseStruct;v.coverage=v.prototype.parseCoverage;v.classDef=v.prototype.parseClassDef;var ms={reserved:v.uShort,reqFeatureIndex:v.uShort,featureIndexes:v.uShortList};v.prototype.parseScriptList=function(){return this.parsePointer(v.recordList({tag:v.tag,script:v.pointer({defaultLangSys:v.pointer(ms),langSysRecords:v.recordList({tag:v.tag,langSys:v.pointer(ms)})})}))||[]};v.prototype.parseFeatureList=function(){return this.parsePointer(v.recordList({tag:v.tag,feature:v.pointer({featureParams:v.offset16,lookupListIndexes:v.uShortList})}))||[]};v.prototype.parseLookupList=function(t){return this.parsePointer(v.list(v.pointer(function(){var e=this.parseUShort();D.argument(1<=e&&e<=9,"GPOS/GSUB lookup type "+e+" unknown.");var r=this.parseUShort(),n=r&16;return{lookupType:e,lookupFlag:r,subtables:this.parseList(v.pointer(t[e])),markFilteringSet:n?this.parseUShort():void 0}})))||[]};v.prototype.parseFeatureVariationsList=function(){return this.parsePointer32(function(){var t=this.parseUShort(),e=this.parseUShort();D.argument(t===1&&e<1,"GPOS/GSUB feature variations table unknown.");var r=this.parseRecordList32({conditionSetOffset:v.offset32,featureTableSubstitutionOffset:v.offset32});return r})||[]};var T={getByte:vs,getCard8:vs,getUShort:Cr,getCard16:Cr,getShort:Jo,getULong:Sn,getFixed:ri,getTag:Qo,getOffset:ea,getBytes:ta,bytesToString:ra,Parser:v};function sa(t,e){e.parseUShort(),t.length=e.parseULong(),t.language=e.parseULong();var r;t.groupCount=r=e.parseULong(),t.glyphIndexMap={};for(var n=0;n<r;n+=1)for(var s=e.parseULong(),i=e.parseULong(),o=e.parseULong(),a=s;a<=i;a+=1)t.glyphIndexMap[a]=o,o++}function ia(t,e,r,n,s){t.length=e.parseUShort(),t.language=e.parseUShort();var i;t.segCount=i=e.parseUShort()>>1,e.skip("uShort",3),t.glyphIndexMap={};for(var o=new T.Parser(r,n+s+14),a=new T.Parser(r,n+s+16+i*2),u=new T.Parser(r,n+s+16+i*4),l=new T.Parser(r,n+s+16+i*6),f=n+s+16+i*8,c=0;c<i-1;c+=1)for(var h=void 0,p=o.parseUShort(),d=a.parseUShort(),x=u.parseShort(),m=l.parseUShort(),b=d;b<=p;b+=1)m!==0?(f=l.offset+l.relativeOffset-2,f+=m,f+=(b-d)*2,h=T.getUShort(r,f),h!==0&&(h=h+x&65535)):h=b+x&65535,t.glyphIndexMap[b]=h}function oa(t,e){var r={};r.version=T.getUShort(t,e),D.argument(r.version===0,"cmap table version should be 0."),r.numTables=T.getUShort(t,e+2);for(var n=-1,s=r.numTables-1;s>=0;s-=1){var i=T.getUShort(t,e+4+s*8),o=T.getUShort(t,e+4+s*8+2);if(i===3&&(o===0||o===1||o===10)||i===0&&(o===0||o===1||o===2||o===3||o===4)){n=T.getULong(t,e+4+s*8+4);break}}if(n===-1)throw new Error("No valid cmap sub-tables found.");var a=new T.Parser(t,e+n);if(r.format=a.parseUShort(),r.format===12)sa(r,a);else if(r.format===4)ia(r,a,t,e,n);else throw new Error("Only format 4 and 12 cmap tables are supported (found format "+r.format+").");return r}function aa(t,e,r){t.segments.push({end:e,start:e,delta:-(e-r),offset:0,glyphIndex:r})}function ua(t){t.segments.push({end:65535,start:65535,delta:1,offset:0})}function la(t){var e=!0,r;for(r=t.length-1;r>0;r-=1){var n=t.get(r);if(n.unicode>65535){console.log("Adding CMAP format 12 (needed!)"),e=!1;break}}var s=[{name:"version",type:"USHORT",value:0},{name:"numTables",type:"USHORT",value:e?1:2},{name:"platformID",type:"USHORT",value:3},{name:"encodingID",type:"USHORT",value:1},{name:"offset",type:"ULONG",value:e?12:20}];e||(s=s.concat([{name:"cmap12PlatformID",type:"USHORT",value:3},{name:"cmap12EncodingID",type:"USHORT",value:10},{name:"cmap12Offset",type:"ULONG",value:0}])),s=s.concat([{name:"format",type:"USHORT",value:4},{name:"cmap4Length",type:"USHORT",value:0},{name:"language",type:"USHORT",value:0},{name:"segCountX2",type:"USHORT",value:0},{name:"searchRange",type:"USHORT",value:0},{name:"entrySelector",type:"USHORT",value:0},{name:"rangeShift",type:"USHORT",value:0}]);var i=new w.Table("cmap",s);for(i.segments=[],r=0;r<t.length;r+=1){for(var o=t.get(r),a=0;a<o.unicodes.length;a+=1)aa(i,o.unicodes[a],r);i.segments=i.segments.sort(function(C,S){return C.start-S.start})}ua(i);var u=i.segments.length,l=0,f=[],c=[],h=[],p=[],d=[],x=[];for(r=0;r<u;r+=1){var m=i.segments[r];m.end<=65535&&m.start<=65535?(f=f.concat({name:"end_"+r,type:"USHORT",value:m.end}),c=c.concat({name:"start_"+r,type:"USHORT",value:m.start}),h=h.concat({name:"idDelta_"+r,type:"SHORT",value:m.delta}),p=p.concat({name:"idRangeOffset_"+r,type:"USHORT",value:m.offset}),m.glyphId!==void 0&&(d=d.concat({name:"glyph_"+r,type:"USHORT",value:m.glyphId}))):l+=1,!e&&m.glyphIndex!==void 0&&(x=x.concat({name:"cmap12Start_"+r,type:"ULONG",value:m.start}),x=x.concat({name:"cmap12End_"+r,type:"ULONG",value:m.end}),x=x.concat({name:"cmap12Glyph_"+r,type:"ULONG",value:m.glyphIndex}))}if(i.segCountX2=(u-l)*2,i.searchRange=Math.pow(2,Math.floor(Math.log(u-l)/Math.log(2)))*2,i.entrySelector=Math.log(i.searchRange/2)/Math.log(2),i.rangeShift=i.segCountX2-i.searchRange,i.fields=i.fields.concat(f),i.fields.push({name:"reservedPad",type:"USHORT",value:0}),i.fields=i.fields.concat(c),i.fields=i.fields.concat(h),i.fields=i.fields.concat(p),i.fields=i.fields.concat(d),i.cmap4Length=14+f.length*2+2+c.length*2+h.length*2+p.length*2+d.length*2,!e){var b=16+x.length*4;i.cmap12Offset=20+i.cmap4Length,i.fields=i.fields.concat([{name:"cmap12Format",type:"USHORT",value:12},{name:"cmap12Reserved",type:"USHORT",value:0},{name:"cmap12Length",type:"ULONG",value:b},{name:"cmap12Language",type:"ULONG",value:0},{name:"cmap12nGroups",type:"ULONG",value:x.length/3}]),i.fields=i.fields.concat(x)}return i}var ni={parse:oa,make:la},Er=[".notdef","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","endash","dagger","daggerdbl","periodcentered","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","questiondown","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","ring","cedilla","hungarumlaut","ogonek","caron","emdash","AE","ordfeminine","Lslash","Oslash","OE","ordmasculine","ae","dotlessi","lslash","oslash","oe","germandbls","onesuperior","logicalnot","mu","trademark","Eth","onehalf","plusminus","Thorn","onequarter","divide","brokenbar","degree","thorn","threequarters","twosuperior","registered","minus","eth","multiply","threesuperior","copyright","Aacute","Acircumflex","Adieresis","Agrave","Aring","Atilde","Ccedilla","Eacute","Ecircumflex","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Ntilde","Oacute","Ocircumflex","Odieresis","Ograve","Otilde","Scaron","Uacute","Ucircumflex","Udieresis","Ugrave","Yacute","Ydieresis","Zcaron","aacute","acircumflex","adieresis","agrave","aring","atilde","ccedilla","eacute","ecircumflex","edieresis","egrave","iacute","icircumflex","idieresis","igrave","ntilde","oacute","ocircumflex","odieresis","ograve","otilde","scaron","uacute","ucircumflex","udieresis","ugrave","yacute","ydieresis","zcaron","exclamsmall","Hungarumlautsmall","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","266 ff","onedotenleader","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","commasuperior","threequartersemdash","periodsuperior","questionsmall","asuperior","bsuperior","centsuperior","dsuperior","esuperior","isuperior","lsuperior","msuperior","nsuperior","osuperior","rsuperior","ssuperior","tsuperior","ff","ffi","ffl","parenleftinferior","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","exclamdownsmall","centoldstyle","Lslashsmall","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","Dotaccentsmall","Macronsmall","figuredash","hypheninferior","Ogoneksmall","Ringsmall","Cedillasmall","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","zerosuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall","001.000","001.001","001.002","001.003","Black","Bold","Book","Light","Medium","Regular","Roman","Semibold"],fa=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quoteright","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","quoteleft","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdown","cent","sterling","fraction","yen","florin","section","currency","quotesingle","quotedblleft","guillemotleft","guilsinglleft","guilsinglright","fi","fl","","endash","dagger","daggerdbl","periodcentered","","paragraph","bullet","quotesinglbase","quotedblbase","quotedblright","guillemotright","ellipsis","perthousand","","questiondown","","grave","acute","circumflex","tilde","macron","breve","dotaccent","dieresis","","ring","cedilla","","hungarumlaut","ogonek","caron","emdash","","","","","","","","","","","","","","","","","AE","","ordfeminine","","","","","Lslash","Oslash","OE","ordmasculine","","","","","","ae","","","","dotlessi","","","lslash","oslash","oe","germandbls"],ha=["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","space","exclamsmall","Hungarumlautsmall","","dollaroldstyle","dollarsuperior","ampersandsmall","Acutesmall","parenleftsuperior","parenrightsuperior","twodotenleader","onedotenleader","comma","hyphen","period","fraction","zerooldstyle","oneoldstyle","twooldstyle","threeoldstyle","fouroldstyle","fiveoldstyle","sixoldstyle","sevenoldstyle","eightoldstyle","nineoldstyle","colon","semicolon","commasuperior","threequartersemdash","periodsuperior","questionsmall","","asuperior","bsuperior","centsuperior","dsuperior","esuperior","","","isuperior","","","lsuperior","msuperior","nsuperior","osuperior","","","rsuperior","ssuperior","tsuperior","","ff","fi","fl","ffi","ffl","parenleftinferior","","parenrightinferior","Circumflexsmall","hyphensuperior","Gravesmall","Asmall","Bsmall","Csmall","Dsmall","Esmall","Fsmall","Gsmall","Hsmall","Ismall","Jsmall","Ksmall","Lsmall","Msmall","Nsmall","Osmall","Psmall","Qsmall","Rsmall","Ssmall","Tsmall","Usmall","Vsmall","Wsmall","Xsmall","Ysmall","Zsmall","colonmonetary","onefitted","rupiah","Tildesmall","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","exclamdownsmall","centoldstyle","Lslashsmall","","","Scaronsmall","Zcaronsmall","Dieresissmall","Brevesmall","Caronsmall","","Dotaccentsmall","","","Macronsmall","","","figuredash","hypheninferior","","","Ogoneksmall","Ringsmall","Cedillasmall","","","","onequarter","onehalf","threequarters","questiondownsmall","oneeighth","threeeighths","fiveeighths","seveneighths","onethird","twothirds","","","zerosuperior","onesuperior","twosuperior","threesuperior","foursuperior","fivesuperior","sixsuperior","sevensuperior","eightsuperior","ninesuperior","zeroinferior","oneinferior","twoinferior","threeinferior","fourinferior","fiveinferior","sixinferior","seveninferior","eightinferior","nineinferior","centinferior","dollarinferior","periodinferior","commainferior","Agravesmall","Aacutesmall","Acircumflexsmall","Atildesmall","Adieresissmall","Aringsmall","AEsmall","Ccedillasmall","Egravesmall","Eacutesmall","Ecircumflexsmall","Edieresissmall","Igravesmall","Iacutesmall","Icircumflexsmall","Idieresissmall","Ethsmall","Ntildesmall","Ogravesmall","Oacutesmall","Ocircumflexsmall","Otildesmall","Odieresissmall","OEsmall","Oslashsmall","Ugravesmall","Uacutesmall","Ucircumflexsmall","Udieresissmall","Yacutesmall","Thornsmall","Ydieresissmall"],ct=[".notdef",".null","nonmarkingreturn","space","exclam","quotedbl","numbersign","dollar","percent","ampersand","quotesingle","parenleft","parenright","asterisk","plus","comma","hyphen","period","slash","zero","one","two","three","four","five","six","seven","eight","nine","colon","semicolon","less","equal","greater","question","at","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","bracketleft","backslash","bracketright","asciicircum","underscore","grave","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","braceleft","bar","braceright","asciitilde","Adieresis","Aring","Ccedilla","Eacute","Ntilde","Odieresis","Udieresis","aacute","agrave","acircumflex","adieresis","atilde","aring","ccedilla","eacute","egrave","ecircumflex","edieresis","iacute","igrave","icircumflex","idieresis","ntilde","oacute","ograve","ocircumflex","odieresis","otilde","uacute","ugrave","ucircumflex","udieresis","dagger","degree","cent","sterling","section","bullet","paragraph","germandbls","registered","copyright","trademark","acute","dieresis","notequal","AE","Oslash","infinity","plusminus","lessequal","greaterequal","yen","mu","partialdiff","summation","product","pi","integral","ordfeminine","ordmasculine","Omega","ae","oslash","questiondown","exclamdown","logicalnot","radical","florin","approxequal","Delta","guillemotleft","guillemotright","ellipsis","nonbreakingspace","Agrave","Atilde","Otilde","OE","oe","endash","emdash","quotedblleft","quotedblright","quoteleft","quoteright","divide","lozenge","ydieresis","Ydieresis","fraction","currency","guilsinglleft","guilsinglright","fi","fl","daggerdbl","periodcentered","quotesinglbase","quotedblbase","perthousand","Acircumflex","Ecircumflex","Aacute","Edieresis","Egrave","Iacute","Icircumflex","Idieresis","Igrave","Oacute","Ocircumflex","apple","Ograve","Uacute","Ucircumflex","Ugrave","dotlessi","circumflex","tilde","macron","breve","dotaccent","ring","cedilla","hungarumlaut","ogonek","caron","Lslash","lslash","Scaron","scaron","Zcaron","zcaron","brokenbar","Eth","eth","Yacute","yacute","Thorn","thorn","minus","multiply","onesuperior","twosuperior","threesuperior","onehalf","onequarter","threequarters","franc","Gbreve","gbreve","Idotaccent","Scedilla","scedilla","Cacute","cacute","Ccaron","ccaron","dcroat"];function si(t){this.font=t}si.prototype.charToGlyphIndex=function(t){var e=t.codePointAt(0),r=this.font.glyphs;if(r){for(var n=0;n<r.length;n+=1)for(var s=r.get(n),i=0;i<s.unicodes.length;i+=1)if(s.unicodes[i]===e)return n}return null};function ii(t){this.cmap=t}ii.prototype.charToGlyphIndex=function(t){return this.cmap.glyphIndexMap[t.codePointAt(0)]||0};function Mr(t,e){this.encoding=t,this.charset=e}Mr.prototype.charToGlyphIndex=function(t){var e=t.codePointAt(0),r=this.encoding[e];return this.charset.indexOf(r)};function kn(t){switch(t.version){case 1:this.names=ct.slice();break;case 2:this.names=new Array(t.numberOfGlyphs);for(var e=0;e<t.numberOfGlyphs;e++)t.glyphNameIndex[e]<ct.length?this.names[e]=ct[t.glyphNameIndex[e]]:this.names[e]=t.names[t.glyphNameIndex[e]-ct.length];break;case 2.5:this.names=new Array(t.numberOfGlyphs);for(var r=0;r<t.numberOfGlyphs;r++)this.names[r]=ct[r+t.glyphNameIndex[r]];break;case 3:this.names=[];break;default:this.names=[];break}}kn.prototype.nameToGlyphIndex=function(t){return this.names.indexOf(t)};kn.prototype.glyphIndexToName=function(t){return this.names[t]};function ca(t){for(var e,r=t.tables.cmap.glyphIndexMap,n=Object.keys(r),s=0;s<n.length;s+=1){var i=n[s],o=r[i];e=t.glyphs.get(o),e.addUnicode(parseInt(i))}for(var a=0;a<t.glyphs.length;a+=1)e=t.glyphs.get(a),t.cffEncoding?t.isCIDFont?e.name="gid"+a:e.name=t.cffEncoding.charset[a]:t.glyphNames.names&&(e.name=t.glyphNames.glyphIndexToName(a))}function pa(t){t._IndexToUnicodeMap={};for(var e=t.tables.cmap.glyphIndexMap,r=Object.keys(e),n=0;n<r.length;n+=1){var s=r[n],i=e[s];t._IndexToUnicodeMap[i]===void 0?t._IndexToUnicodeMap[i]={unicodes:[parseInt(s)]}:t._IndexToUnicodeMap[i].unicodes.push(parseInt(s))}}function da(t,e){e.lowMemory?pa(t):ca(t)}function ga(t,e,r,n,s){t.beginPath(),t.moveTo(e,r),t.lineTo(n,s),t.stroke()}var ht={line:ga};function va(t,e){var r=e||new ue;return{configurable:!0,get:function(){return typeof r=="function"&&(r=r()),r},set:function(n){r=n}}}function Te(t){this.bindConstructorValues(t)}Te.prototype.bindConstructorValues=function(t){this.index=t.index||0,this.name=t.name||null,this.unicode=t.unicode||void 0,this.unicodes=t.unicodes||t.unicode!==void 0?[t.unicode]:[],"xMin"in t&&(this.xMin=t.xMin),"yMin"in t&&(this.yMin=t.yMin),"xMax"in t&&(this.xMax=t.xMax),"yMax"in t&&(this.yMax=t.yMax),"advanceWidth"in t&&(this.advanceWidth=t.advanceWidth),Object.defineProperty(this,"path",va(this,t.path))};Te.prototype.addUnicode=function(t){this.unicodes.length===0&&(this.unicode=t),this.unicodes.push(t)};Te.prototype.getBoundingBox=function(){return this.path.getBoundingBox()};Te.prototype.getPath=function(t,e,r,n,s){t=t!==void 0?t:0,e=e!==void 0?e:0,r=r!==void 0?r:72;var i,o;n||(n={});var a=n.xScale,u=n.yScale;if(n.hinting&&s&&s.hinting&&(o=this.path&&s.hinting.exec(this,r)),o)i=s.hinting.getCommands(o),t=Math.round(t),e=Math.round(e),a=u=1;else{i=this.path.commands;var l=1/(this.path.unitsPerEm||1e3)*r;a===void 0&&(a=l),u===void 0&&(u=l)}for(var f=new ue,c=0;c<i.length;c+=1){var h=i[c];h.type==="M"?f.moveTo(t+h.x*a,e+-h.y*u):h.type==="L"?f.lineTo(t+h.x*a,e+-h.y*u):h.type==="Q"?f.quadraticCurveTo(t+h.x1*a,e+-h.y1*u,t+h.x*a,e+-h.y*u):h.type==="C"?f.curveTo(t+h.x1*a,e+-h.y1*u,t+h.x2*a,e+-h.y2*u,t+h.x*a,e+-h.y*u):h.type==="Z"&&f.closePath()}return f};Te.prototype.getContours=function(){if(this.points===void 0)return[];for(var t=[],e=[],r=0;r<this.points.length;r+=1){var n=this.points[r];e.push(n),n.lastPointOfContour&&(t.push(e),e=[])}return D.argument(e.length===0,"There are still points left in the current contour."),t};Te.prototype.getMetrics=function(){for(var t=this.path.commands,e=[],r=[],n=0;n<t.length;n+=1){var s=t[n];s.type!=="Z"&&(e.push(s.x),r.push(s.y)),(s.type==="Q"||s.type==="C")&&(e.push(s.x1),r.push(s.y1)),s.type==="C"&&(e.push(s.x2),r.push(s.y2))}var i={xMin:Math.min.apply(null,e),yMin:Math.min.apply(null,r),xMax:Math.max.apply(null,e),yMax:Math.max.apply(null,r),leftSideBearing:this.leftSideBearing};return isFinite(i.xMin)||(i.xMin=0),isFinite(i.xMax)||(i.xMax=this.advanceWidth),isFinite(i.yMin)||(i.yMin=0),isFinite(i.yMax)||(i.yMax=0),i.rightSideBearing=this.advanceWidth-i.leftSideBearing-(i.xMax-i.xMin),i};Te.prototype.draw=function(t,e,r,n,s){this.getPath(e,r,n,s).draw(t)};Te.prototype.drawPoints=function(t,e,r,n){function s(c,h,p,d){t.beginPath();for(var x=0;x<c.length;x+=1)t.moveTo(h+c[x].x*d,p+c[x].y*d),t.arc(h+c[x].x*d,p+c[x].y*d,2,0,Math.PI*2,!1);t.closePath(),t.fill()}e=e!==void 0?e:0,r=r!==void 0?r:0,n=n!==void 0?n:24;for(var i=1/this.path.unitsPerEm*n,o=[],a=[],u=this.path,l=0;l<u.commands.length;l+=1){var f=u.commands[l];f.x!==void 0&&o.push({x:f.x,y:-f.y}),f.x1!==void 0&&a.push({x:f.x1,y:-f.y1}),f.x2!==void 0&&a.push({x:f.x2,y:-f.y2})}t.fillStyle="blue",s(o,e,r,i),t.fillStyle="red",s(a,e,r,i)};Te.prototype.drawMetrics=function(t,e,r,n){var s;e=e!==void 0?e:0,r=r!==void 0?r:0,n=n!==void 0?n:24,s=1/this.path.unitsPerEm*n,t.lineWidth=1,t.strokeStyle="black",ht.line(t,e,-1e4,e,1e4),ht.line(t,-1e4,r,1e4,r);var i=this.xMin||0,o=this.yMin||0,a=this.xMax||0,u=this.yMax||0,l=this.advanceWidth||0;t.strokeStyle="blue",ht.line(t,e+i*s,-1e4,e+i*s,1e4),ht.line(t,e+a*s,-1e4,e+a*s,1e4),ht.line(t,-1e4,r+-o*s,1e4,r+-o*s),ht.line(t,-1e4,r+-u*s,1e4,r+-u*s),t.strokeStyle="green",ht.line(t,e+l*s,-1e4,e+l*s,1e4)};function Sr(t,e,r){Object.defineProperty(t,e,{get:function(){return t.path,t[r]},set:function(n){t[r]=n},enumerable:!0,configurable:!0})}function En(t,e){if(this.font=t,this.glyphs={},Array.isArray(e))for(var r=0;r<e.length;r++){var n=e[r];n.path.unitsPerEm=t.unitsPerEm,this.glyphs[r]=n}this.length=e&&e.length||0}En.prototype.get=function(t){if(this.glyphs[t]===void 0){this.font._push(t),typeof this.glyphs[t]=="function"&&(this.glyphs[t]=this.glyphs[t]());var e=this.glyphs[t],r=this.font._IndexToUnicodeMap[t];if(r)for(var n=0;n<r.unicodes.length;n++)e.addUnicode(r.unicodes[n]);this.font.cffEncoding?this.font.isCIDFont?e.name="gid"+t:e.name=this.font.cffEncoding.charset[t]:this.font.glyphNames.names&&(e.name=this.font.glyphNames.glyphIndexToName(t)),this.glyphs[t].advanceWidth=this.font._hmtxTableData[t].advanceWidth,this.glyphs[t].leftSideBearing=this.font._hmtxTableData[t].leftSideBearing}else typeof this.glyphs[t]=="function"&&(this.glyphs[t]=this.glyphs[t]());return this.glyphs[t]};En.prototype.push=function(t,e){this.glyphs[t]=e,this.length++};function ma(t,e){return new Te({index:e,font:t})}function xa(t,e,r,n,s,i){return function(){var o=new Te({index:e,font:t});return o.path=function(){r(o,n,s);var a=i(t.glyphs,o);return a.unitsPerEm=t.unitsPerEm,a},Sr(o,"xMin","_xMin"),Sr(o,"xMax","_xMax"),Sr(o,"yMin","_yMin"),Sr(o,"yMax","_yMax"),o}}function ya(t,e,r,n){return function(){var s=new Te({index:e,font:t});return s.path=function(){var i=r(t,s,n);return i.unitsPerEm=t.unitsPerEm,i},s}}var Ve={GlyphSet:En,glyphLoader:ma,ttfGlyphLoader:xa,cffGlyphLoader:ya};function oi(t,e){if(t===e)return!0;if(Array.isArray(t)&&Array.isArray(e)){if(t.length!==e.length)return!1;for(var r=0;r<t.length;r+=1)if(!oi(t[r],e[r]))return!1;return!0}else return!1}function pn(t){var e;return t.length<1240?e=107:t.length<33900?e=1131:e=32768,e}function et(t,e,r){var n=[],s=[],i=T.getCard16(t,e),o,a;if(i!==0){var u=T.getByte(t,e+2);o=e+(i+1)*u+2;for(var l=e+3,f=0;f<i+1;f+=1)n.push(T.getOffset(t,l,u)),l+=u;a=o+n[i]}else a=e+2;for(var c=0;c<n.length-1;c+=1){var h=T.getBytes(t,o+n[c],o+n[c+1]);r&&(h=r(h)),s.push(h)}return{objects:s,startOffset:e,endOffset:a}}function ba(t,e){var r=[],n=T.getCard16(t,e),s,i;if(n!==0){var o=T.getByte(t,e+2);s=e+(n+1)*o+2;for(var a=e+3,u=0;u<n+1;u+=1)r.push(T.getOffset(t,a,o)),a+=o;i=s+r[n]}else i=e+2;return{offsets:r,startOffset:e,endOffset:i}}function Sa(t,e,r,n,s){var i=T.getCard16(r,n),o=0;if(i!==0){var a=T.getByte(r,n+2);o=n+(i+1)*a+2}var u=T.getBytes(r,o+e[t],o+e[t+1]);return s&&(u=s(u)),u}function ka(t){for(var e="",r=15,n=["0","1","2","3","4","5","6","7","8","9",".","E","E-",null,"-"];;){var s=t.parseByte(),i=s>>4,o=s&15;if(i===r||(e+=n[i],o===r))break;e+=n[o]}return parseFloat(e)}function Ea(t,e){var r,n,s,i;if(e===28)return r=t.parseByte(),n=t.parseByte(),r<<8|n;if(e===29)return r=t.parseByte(),n=t.parseByte(),s=t.parseByte(),i=t.parseByte(),r<<24|n<<16|s<<8|i;if(e===30)return ka(t);if(e>=32&&e<=246)return e-139;if(e>=247&&e<=250)return r=t.parseByte(),(e-247)*256+r+108;if(e>=251&&e<=254)return r=t.parseByte(),-(e-251)*256-r-108;throw new Error("Invalid b0 "+e)}function wa(t){for(var e={},r=0;r<t.length;r+=1){var n=t[r][0],s=t[r][1],i=void 0;if(s.length===1?i=s[0]:i=s,e.hasOwnProperty(n)&&!isNaN(e[n]))throw new Error("Object "+e+" already has key "+n);e[n]=i}return e}function ai(t,e,r){e=e!==void 0?e:0;var n=new T.Parser(t,e),s=[],i=[];for(r=r!==void 0?r:t.length;n.relativeOffset<r;){var o=n.parseByte();o<=21?(o===12&&(o=1200+n.parseByte()),s.push([o,i]),i=[]):i.push(Ea(n,o))}return wa(s)}function Gt(t,e){return e<=390?e=Er[e]:e=t[e-391],e}function ui(t,e,r){for(var n={},s,i=0;i<e.length;i+=1){var o=e[i];if(Array.isArray(o.type)){var a=[];a.length=o.type.length;for(var u=0;u<o.type.length;u++)s=t[o.op]!==void 0?t[o.op][u]:void 0,s===void 0&&(s=o.value!==void 0&&o.value[u]!==void 0?o.value[u]:null),o.type[u]==="SID"&&(s=Gt(r,s)),a[u]=s;n[o.name]=a}else s=t[o.op],s===void 0&&(s=o.value!==void 0?o.value:null),o.type==="SID"&&(s=Gt(r,s)),n[o.name]=s}return n}function Pa(t,e){var r={};return r.formatMajor=T.getCard8(t,e),r.formatMinor=T.getCard8(t,e+1),r.size=T.getCard8(t,e+2),r.offsetSize=T.getCard8(t,e+3),r.startOffset=e,r.endOffset=e+4,r}var li=[{name:"version",op:0,type:"SID"},{name:"notice",op:1,type:"SID"},{name:"copyright",op:1200,type:"SID"},{name:"fullName",op:2,type:"SID"},{name:"familyName",op:3,type:"SID"},{name:"weight",op:4,type:"SID"},{name:"isFixedPitch",op:1201,type:"number",value:0},{name:"italicAngle",op:1202,type:"number",value:0},{name:"underlinePosition",op:1203,type:"number",value:-100},{name:"underlineThickness",op:1204,type:"number",value:50},{name:"paintType",op:1205,type:"number",value:0},{name:"charstringType",op:1206,type:"number",value:2},{name:"fontMatrix",op:1207,type:["real","real","real","real","real","real"],value:[.001,0,0,.001,0,0]},{name:"uniqueId",op:13,type:"number"},{name:"fontBBox",op:5,type:["number","number","number","number"],value:[0,0,0,0]},{name:"strokeWidth",op:1208,type:"number",value:0},{name:"xuid",op:14,type:[],value:null},{name:"charset",op:15,type:"offset",value:0},{name:"encoding",op:16,type:"offset",value:0},{name:"charStrings",op:17,type:"offset",value:0},{name:"private",op:18,type:["number","offset"],value:[0,0]},{name:"ros",op:1230,type:["SID","SID","number"]},{name:"cidFontVersion",op:1231,type:"number",value:0},{name:"cidFontRevision",op:1232,type:"number",value:0},{name:"cidFontType",op:1233,type:"number",value:0},{name:"cidCount",op:1234,type:"number",value:8720},{name:"uidBase",op:1235,type:"number"},{name:"fdArray",op:1236,type:"offset"},{name:"fdSelect",op:1237,type:"offset"},{name:"fontName",op:1238,type:"SID"}],fi=[{name:"subrs",op:19,type:"offset",value:0},{name:"defaultWidthX",op:20,type:"number",value:0},{name:"nominalWidthX",op:21,type:"number",value:0}];function Ia(t,e){var r=ai(t,0,t.byteLength);return ui(r,li,e)}function hi(t,e,r,n){var s=ai(t,e,r);return ui(s,fi,n)}function xs(t,e,r,n){for(var s=[],i=0;i<r.length;i+=1){var o=new DataView(new Uint8Array(r[i]).buffer),a=Ia(o,n);a._subrs=[],a._subrsBias=0,a._defaultWidthX=0,a._nominalWidthX=0;var u=a.private[0],l=a.private[1];if(u!==0&&l!==0){var f=hi(t,l+e,u,n);if(a._defaultWidthX=f.defaultWidthX,a._nominalWidthX=f.nominalWidthX,f.subrs!==0){var c=l+f.subrs,h=et(t,c+e);a._subrs=h.objects,a._subrsBias=pn(a._subrs)}a._privateDict=f}s.push(a)}return s}function La(t,e,r,n){var s,i,o=new T.Parser(t,e);r-=1;var a=[".notdef"],u=o.parseCard8();if(u===0)for(var l=0;l<r;l+=1)s=o.parseSID(),a.push(Gt(n,s));else if(u===1)for(;a.length<=r;){s=o.parseSID(),i=o.parseCard8();for(var f=0;f<=i;f+=1)a.push(Gt(n,s)),s+=1}else if(u===2)for(;a.length<=r;){s=o.parseSID(),i=o.parseCard16();for(var c=0;c<=i;c+=1)a.push(Gt(n,s)),s+=1}else throw new Error("Unknown charset format "+u);return a}function Ta(t,e,r){var n,s={},i=new T.Parser(t,e),o=i.parseCard8();if(o===0)for(var a=i.parseCard8(),u=0;u<a;u+=1)n=i.parseCard8(),s[n]=u;else if(o===1){var l=i.parseCard8();n=1;for(var f=0;f<l;f+=1)for(var c=i.parseCard8(),h=i.parseCard8(),p=c;p<=c+h;p+=1)s[p]=n,n+=1}else throw new Error("Unknown encoding format "+o);return new Mr(s,r)}function ys(t,e,r){var n,s,i,o,a=new ue,u=[],l=0,f=!1,c=!1,h=0,p=0,d,x,m,b;if(t.isCIDFont){var C=t.tables.cff.topDict._fdSelect[e.index],S=t.tables.cff.topDict._fdArray[C];d=S._subrs,x=S._subrsBias,m=S._defaultWidthX,b=S._nominalWidthX}else d=t.tables.cff.topDict._subrs,x=t.tables.cff.topDict._subrsBias,m=t.tables.cff.topDict._defaultWidthX,b=t.tables.cff.topDict._nominalWidthX;var M=m;function I(P,W){c&&a.closePath(),a.moveTo(P,W),c=!0}function X(){var P;P=u.length%2!==0,P&&!f&&(M=u.shift()+b),l+=u.length>>1,u.length=0,f=!0}function O(P){for(var W,j,se,le,pe,Q,k,F,A,R,N,G,B=0;B<P.length;){var $=P[B];switch(B+=1,$){case 1:X();break;case 3:X();break;case 4:u.length>1&&!f&&(M=u.shift()+b,f=!0),p+=u.pop(),I(h,p);break;case 5:for(;u.length>0;)h+=u.shift(),p+=u.shift(),a.lineTo(h,p);break;case 6:for(;u.length>0&&(h+=u.shift(),a.lineTo(h,p),u.length!==0);)p+=u.shift(),a.lineTo(h,p);break;case 7:for(;u.length>0&&(p+=u.shift(),a.lineTo(h,p),u.length!==0);)h+=u.shift(),a.lineTo(h,p);break;case 8:for(;u.length>0;)n=h+u.shift(),s=p+u.shift(),i=n+u.shift(),o=s+u.shift(),h=i+u.shift(),p=o+u.shift(),a.curveTo(n,s,i,o,h,p);break;case 10:pe=u.pop()+x,Q=d[pe],Q&&O(Q);break;case 11:return;case 12:switch($=P[B],B+=1,$){case 35:n=h+u.shift(),s=p+u.shift(),i=n+u.shift(),o=s+u.shift(),k=i+u.shift(),F=o+u.shift(),A=k+u.shift(),R=F+u.shift(),N=A+u.shift(),G=R+u.shift(),h=N+u.shift(),p=G+u.shift(),u.shift(),a.curveTo(n,s,i,o,k,F),a.curveTo(A,R,N,G,h,p);break;case 34:n=h+u.shift(),s=p,i=n+u.shift(),o=s+u.shift(),k=i+u.shift(),F=o,A=k+u.shift(),R=o,N=A+u.shift(),G=p,h=N+u.shift(),a.curveTo(n,s,i,o,k,F),a.curveTo(A,R,N,G,h,p);break;case 36:n=h+u.shift(),s=p+u.shift(),i=n+u.shift(),o=s+u.shift(),k=i+u.shift(),F=o,A=k+u.shift(),R=o,N=A+u.shift(),G=R+u.shift(),h=N+u.shift(),a.curveTo(n,s,i,o,k,F),a.curveTo(A,R,N,G,h,p);break;case 37:n=h+u.shift(),s=p+u.shift(),i=n+u.shift(),o=s+u.shift(),k=i+u.shift(),F=o+u.shift(),A=k+u.shift(),R=F+u.shift(),N=A+u.shift(),G=R+u.shift(),Math.abs(N-h)>Math.abs(G-p)?h=N+u.shift():p=G+u.shift(),a.curveTo(n,s,i,o,k,F),a.curveTo(A,R,N,G,h,p);break;default:console.log("Glyph "+e.index+": unknown operator 1200"+$),u.length=0}break;case 14:u.length>0&&!f&&(M=u.shift()+b,f=!0),c&&(a.closePath(),c=!1);break;case 18:X();break;case 19:case 20:X(),B+=l+7>>3;break;case 21:u.length>2&&!f&&(M=u.shift()+b,f=!0),p+=u.pop(),h+=u.pop(),I(h,p);break;case 22:u.length>1&&!f&&(M=u.shift()+b,f=!0),h+=u.pop(),I(h,p);break;case 23:X();break;case 24:for(;u.length>2;)n=h+u.shift(),s=p+u.shift(),i=n+u.shift(),o=s+u.shift(),h=i+u.shift(),p=o+u.shift(),a.curveTo(n,s,i,o,h,p);h+=u.shift(),p+=u.shift(),a.lineTo(h,p);break;case 25:for(;u.length>6;)h+=u.shift(),p+=u.shift(),a.lineTo(h,p);n=h+u.shift(),s=p+u.shift(),i=n+u.shift(),o=s+u.shift(),h=i+u.shift(),p=o+u.shift(),a.curveTo(n,s,i,o,h,p);break;case 26:for(u.length%2&&(h+=u.shift());u.length>0;)n=h,s=p+u.shift(),i=n+u.shift(),o=s+u.shift(),h=i,p=o+u.shift(),a.curveTo(n,s,i,o,h,p);break;case 27:for(u.length%2&&(p+=u.shift());u.length>0;)n=h+u.shift(),s=p,i=n+u.shift(),o=s+u.shift(),h=i+u.shift(),p=o,a.curveTo(n,s,i,o,h,p);break;case 28:W=P[B],j=P[B+1],u.push((W<<24|j<<16)>>16),B+=2;break;case 29:pe=u.pop()+t.gsubrsBias,Q=t.gsubrs[pe],Q&&O(Q);break;case 30:for(;u.length>0&&(n=h,s=p+u.shift(),i=n+u.shift(),o=s+u.shift(),h=i+u.shift(),p=o+(u.length===1?u.shift():0),a.curveTo(n,s,i,o,h,p),u.length!==0);)n=h+u.shift(),s=p,i=n+u.shift(),o=s+u.shift(),p=o+u.shift(),h=i+(u.length===1?u.shift():0),a.curveTo(n,s,i,o,h,p);break;case 31:for(;u.length>0&&(n=h+u.shift(),s=p,i=n+u.shift(),o=s+u.shift(),p=o+u.shift(),h=i+(u.length===1?u.shift():0),a.curveTo(n,s,i,o,h,p),u.length!==0);)n=h,s=p+u.shift(),i=n+u.shift(),o=s+u.shift(),h=i+u.shift(),p=o+(u.length===1?u.shift():0),a.curveTo(n,s,i,o,h,p);break;default:$<32?console.log("Glyph "+e.index+": unknown operator "+$):$<247?u.push($-139):$<251?(W=P[B],B+=1,u.push(($-247)*256+W+108)):$<255?(W=P[B],B+=1,u.push(-($-251)*256-W-108)):(W=P[B],j=P[B+1],se=P[B+2],le=P[B+3],B+=4,u.push((W<<24|j<<16|se<<8|le)/65536))}}}return O(r),e.advanceWidth=M,a}function Ca(t,e,r,n){var s=[],i,o=new T.Parser(t,e),a=o.parseCard8();if(a===0)for(var u=0;u<r;u++){if(i=o.parseCard8(),i>=n)throw new Error("CFF table CID Font FDSelect has bad FD index value "+i+" (FD count "+n+")");s.push(i)}else if(a===3){var l=o.parseCard16(),f=o.parseCard16();if(f!==0)throw new Error("CFF Table CID Font FDSelect format 3 range has bad initial GID "+f);for(var c,h=0;h<l;h++){if(i=o.parseCard8(),c=o.parseCard16(),i>=n)throw new Error("CFF table CID Font FDSelect has bad FD index value "+i+" (FD count "+n+")");if(c>r)throw new Error("CFF Table CID Font FDSelect format 3 range has bad GID "+c);for(;f<c;f++)s.push(i);f=c}if(c!==r)throw new Error("CFF Table CID Font FDSelect format 3 range has bad final GID "+c)}else throw new Error("CFF Table CID Font FDSelect table has unsupported format "+a);return s}function Ma(t,e,r,n){r.tables.cff={};var s=Pa(t,e),i=et(t,s.endOffset,T.bytesToString),o=et(t,i.endOffset),a=et(t,o.endOffset,T.bytesToString),u=et(t,a.endOffset);r.gsubrs=u.objects,r.gsubrsBias=pn(r.gsubrs);var l=xs(t,e,o.objects,a.objects);if(l.length!==1)throw new Error("CFF table has too many fonts in 'FontSet' - count of fonts NameIndex.length = "+l.length);var f=l[0];if(r.tables.cff.topDict=f,f._privateDict&&(r.defaultWidthX=f._privateDict.defaultWidthX,r.nominalWidthX=f._privateDict.nominalWidthX),f.ros[0]!==void 0&&f.ros[1]!==void 0&&(r.isCIDFont=!0),r.isCIDFont){var c=f.fdArray,h=f.fdSelect;if(c===0||h===0)throw new Error("Font is marked as a CID font, but FDArray and/or FDSelect information is missing");c+=e;var p=et(t,c),d=xs(t,e,p.objects,a.objects);f._fdArray=d,h+=e,f._fdSelect=Ca(t,h,r.numGlyphs,d.length)}var x=e+f.private[1],m=hi(t,x,f.private[0],a.objects);if(r.defaultWidthX=m.defaultWidthX,r.nominalWidthX=m.nominalWidthX,m.subrs!==0){var b=x+m.subrs,C=et(t,b);r.subrs=C.objects,r.subrsBias=pn(r.subrs)}else r.subrs=[],r.subrsBias=0;var S;n.lowMemory?(S=ba(t,e+f.charStrings),r.nGlyphs=S.offsets.length):(S=et(t,e+f.charStrings),r.nGlyphs=S.objects.length);var M=La(t,e+f.charset,r.nGlyphs,a.objects);if(f.encoding===0?r.cffEncoding=new Mr(fa,M):f.encoding===1?r.cffEncoding=new Mr(ha,M):r.cffEncoding=Ta(t,e+f.encoding,M),r.encoding=r.encoding||r.cffEncoding,r.glyphs=new Ve.GlyphSet(r),n.lowMemory)r._push=function(O){var P=Sa(O,S.offsets,t,e+f.charStrings);r.glyphs.push(O,Ve.cffGlyphLoader(r,O,ys,P))};else for(var I=0;I<r.nGlyphs;I+=1){var X=S.objects[I];r.glyphs.push(I,Ve.cffGlyphLoader(r,I,ys,X))}}function ci(t,e){var r,n=Er.indexOf(t);return n>=0&&(r=n),n=e.indexOf(t),n>=0?r=n+Er.length:(r=Er.length+e.length,e.push(t)),r}function Oa(){return new w.Record("Header",[{name:"major",type:"Card8",value:1},{name:"minor",type:"Card8",value:0},{name:"hdrSize",type:"Card8",value:4},{name:"major",type:"Card8",value:1}])}function Fa(t){var e=new w.Record("Name INDEX",[{name:"names",type:"INDEX",value:[]}]);e.names=[];for(var r=0;r<t.length;r+=1)e.names.push({name:"name_"+r,type:"NAME",value:t[r]});return e}function pi(t,e,r){for(var n={},s=0;s<t.length;s+=1){var i=t[s],o=e[i.name];o!==void 0&&!oi(o,i.value)&&(i.type==="SID"&&(o=ci(o,r)),n[i.op]={name:i.name,type:i.type,value:o})}return n}function bs(t,e){var r=new w.Record("Top DICT",[{name:"dict",type:"DICT",value:{}}]);return r.dict=pi(li,t,e),r}function Ss(t){var e=new w.Record("Top DICT INDEX",[{name:"topDicts",type:"INDEX",value:[]}]);return e.topDicts=[{name:"topDict_0",type:"TABLE",value:t}],e}function Aa(t){var e=new w.Record("String INDEX",[{name:"strings",type:"INDEX",value:[]}]);e.strings=[];for(var r=0;r<t.length;r+=1)e.strings.push({name:"string_"+r,type:"STRING",value:t[r]});return e}function Da(){return new w.Record("Global Subr INDEX",[{name:"subrs",type:"INDEX",value:[]}])}function Ua(t,e){for(var r=new w.Record("Charsets",[{name:"format",type:"Card8",value:0}]),n=0;n<t.length;n+=1){var s=t[n],i=ci(s,e);r.fields.push({name:"glyph_"+n,type:"SID",value:i})}return r}function Ra(t){var e=[],r=t.path;e.push({name:"width",type:"NUMBER",value:t.advanceWidth});for(var n=0,s=0,i=0;i<r.commands.length;i+=1){var o=void 0,a=void 0,u=r.commands[i];if(u.type==="Q"){var l=.3333333333333333,f=2/3;u={type:"C",x:u.x,y:u.y,x1:Math.round(l*n+f*u.x1),y1:Math.round(l*s+f*u.y1),x2:Math.round(l*u.x+f*u.x1),y2:Math.round(l*u.y+f*u.y1)}}if(u.type==="M")o=Math.round(u.x-n),a=Math.round(u.y-s),e.push({name:"dx",type:"NUMBER",value:o}),e.push({name:"dy",type:"NUMBER",value:a}),e.push({name:"rmoveto",type:"OP",value:21}),n=Math.round(u.x),s=Math.round(u.y);else if(u.type==="L")o=Math.round(u.x-n),a=Math.round(u.y-s),e.push({name:"dx",type:"NUMBER",value:o}),e.push({name:"dy",type:"NUMBER",value:a}),e.push({name:"rlineto",type:"OP",value:5}),n=Math.round(u.x),s=Math.round(u.y);else if(u.type==="C"){var c=Math.round(u.x1-n),h=Math.round(u.y1-s),p=Math.round(u.x2-u.x1),d=Math.round(u.y2-u.y1);o=Math.round(u.x-u.x2),a=Math.round(u.y-u.y2),e.push({name:"dx1",type:"NUMBER",value:c}),e.push({name:"dy1",type:"NUMBER",value:h}),e.push({name:"dx2",type:"NUMBER",value:p}),e.push({name:"dy2",type:"NUMBER",value:d}),e.push({name:"dx",type:"NUMBER",value:o}),e.push({name:"dy",type:"NUMBER",value:a}),e.push({name:"rrcurveto",type:"OP",value:8}),n=Math.round(u.x),s=Math.round(u.y)}}return e.push({name:"endchar",type:"OP",value:14}),e}function Na(t){for(var e=new w.Record("CharStrings INDEX",[{name:"charStrings",type:"INDEX",value:[]}]),r=0;r<t.length;r+=1){var n=t.get(r),s=Ra(n);e.charStrings.push({name:n.name,type:"CHARSTRING",value:s})}return e}function Ba(t,e){var r=new w.Record("Private DICT",[{name:"dict",type:"DICT",value:{}}]);return r.dict=pi(fi,t,e),r}function Ga(t,e){for(var r=new w.Table("CFF ",[{name:"header",type:"RECORD"},{name:"nameIndex",type:"RECORD"},{name:"topDictIndex",type:"RECORD"},{name:"stringIndex",type:"RECORD"},{name:"globalSubrIndex",type:"RECORD"},{name:"charsets",type:"RECORD"},{name:"charStringsIndex",type:"RECORD"},{name:"privateDict",type:"RECORD"}]),n=1/e.unitsPerEm,s={version:e.version,fullName:e.fullName,familyName:e.familyName,weight:e.weightName,fontBBox:e.fontBBox||[0,0,0,0],fontMatrix:[n,0,0,n,0,0],charset:999,encoding:0,charStrings:999,private:[0,999]},i={},o=[],a,u=1;u<t.length;u+=1)a=t.get(u),o.push(a.name);var l=[];r.header=Oa(),r.nameIndex=Fa([e.postScriptName]);var f=bs(s,l);r.topDictIndex=Ss(f),r.globalSubrIndex=Da(),r.charsets=Ua(o,l),r.charStringsIndex=Na(t),r.privateDict=Ba(i,l),r.stringIndex=Aa(l);var c=r.header.sizeOf()+r.nameIndex.sizeOf()+r.topDictIndex.sizeOf()+r.stringIndex.sizeOf()+r.globalSubrIndex.sizeOf();return s.charset=c,s.encoding=0,s.charStrings=s.charset+r.charsets.sizeOf(),s.private[1]=s.charStrings+r.charStringsIndex.sizeOf(),f=bs(s,l),r.topDictIndex=Ss(f),r}var di={parse:Ma,make:Ga};function Ha(t,e){var r={},n=new T.Parser(t,e);return r.version=n.parseVersion(),r.fontRevision=Math.round(n.parseFixed()*1e3)/1e3,r.checkSumAdjustment=n.parseULong(),r.magicNumber=n.parseULong(),D.argument(r.magicNumber===1594834165,"Font header has wrong magic number."),r.flags=n.parseUShort(),r.unitsPerEm=n.parseUShort(),r.created=n.parseLongDateTime(),r.modified=n.parseLongDateTime(),r.xMin=n.parseShort(),r.yMin=n.parseShort(),r.xMax=n.parseShort(),r.yMax=n.parseShort(),r.macStyle=n.parseUShort(),r.lowestRecPPEM=n.parseUShort(),r.fontDirectionHint=n.parseShort(),r.indexToLocFormat=n.parseShort(),r.glyphDataFormat=n.parseShort(),r}function za(t){var e=Math.round(new Date().getTime()/1e3)+2082844800,r=e;return t.createdTimestamp&&(r=t.createdTimestamp+2082844800),new w.Table("head",[{name:"version",type:"FIXED",value:65536},{name:"fontRevision",type:"FIXED",value:65536},{name:"checkSumAdjustment",type:"ULONG",value:0},{name:"magicNumber",type:"ULONG",value:1594834165},{name:"flags",type:"USHORT",value:0},{name:"unitsPerEm",type:"USHORT",value:1e3},{name:"created",type:"LONGDATETIME",value:r},{name:"modified",type:"LONGDATETIME",value:e},{name:"xMin",type:"SHORT",value:0},{name:"yMin",type:"SHORT",value:0},{name:"xMax",type:"SHORT",value:0},{name:"yMax",type:"SHORT",value:0},{name:"macStyle",type:"USHORT",value:0},{name:"lowestRecPPEM",type:"USHORT",value:0},{name:"fontDirectionHint",type:"SHORT",value:2},{name:"indexToLocFormat",type:"SHORT",value:0},{name:"glyphDataFormat",type:"SHORT",value:0}],t)}var gi={parse:Ha,make:za};function Va(t,e){var r={},n=new T.Parser(t,e);return r.version=n.parseVersion(),r.ascender=n.parseShort(),r.descender=n.parseShort(),r.lineGap=n.parseShort(),r.advanceWidthMax=n.parseUShort(),r.minLeftSideBearing=n.parseShort(),r.minRightSideBearing=n.parseShort(),r.xMaxExtent=n.parseShort(),r.caretSlopeRise=n.parseShort(),r.caretSlopeRun=n.parseShort(),r.caretOffset=n.parseShort(),n.relativeOffset+=8,r.metricDataFormat=n.parseShort(),r.numberOfHMetrics=n.parseUShort(),r}function Xa(t){return new w.Table("hhea",[{name:"version",type:"FIXED",value:65536},{name:"ascender",type:"FWORD",value:0},{name:"descender",type:"FWORD",value:0},{name:"lineGap",type:"FWORD",value:0},{name:"advanceWidthMax",type:"UFWORD",value:0},{name:"minLeftSideBearing",type:"FWORD",value:0},{name:"minRightSideBearing",type:"FWORD",value:0},{name:"xMaxExtent",type:"FWORD",value:0},{name:"caretSlopeRise",type:"SHORT",value:1},{name:"caretSlopeRun",type:"SHORT",value:0},{name:"caretOffset",type:"SHORT",value:0},{name:"reserved1",type:"SHORT",value:0},{name:"reserved2",type:"SHORT",value:0},{name:"reserved3",type:"SHORT",value:0},{name:"reserved4",type:"SHORT",value:0},{name:"metricDataFormat",type:"SHORT",value:0},{name:"numberOfHMetrics",type:"USHORT",value:0}],t)}var vi={parse:Va,make:Xa};function qa(t,e,r,n,s){for(var i,o,a=new T.Parser(t,e),u=0;u<n;u+=1){u<r&&(i=a.parseUShort(),o=a.parseShort());var l=s.get(u);l.advanceWidth=i,l.leftSideBearing=o}}function Wa(t,e,r,n,s){t._hmtxTableData={};for(var i,o,a=new T.Parser(e,r),u=0;u<s;u+=1)u<n&&(i=a.parseUShort(),o=a.parseShort()),t._hmtxTableData[u]={advanceWidth:i,leftSideBearing:o}}function $a(t,e,r,n,s,i,o){o.lowMemory?Wa(t,e,r,n,s):qa(e,r,n,s,i)}function Za(t){for(var e=new w.Table("hmtx",[]),r=0;r<t.length;r+=1){var n=t.get(r),s=n.advanceWidth||0,i=n.leftSideBearing||0;e.fields.push({name:"advanceWidth_"+r,type:"USHORT",value:s}),e.fields.push({name:"leftSideBearing_"+r,type:"SHORT",value:i})}return e}var mi={parse:$a,make:Za};function Ya(t){for(var e=new w.Table("ltag",[{name:"version",type:"ULONG",value:1},{name:"flags",type:"ULONG",value:0},{name:"numTags",type:"ULONG",value:t.length}]),r="",n=12+t.length*4,s=0;s<t.length;++s){var i=r.indexOf(t[s]);i<0&&(i=r.length,r+=t[s]),e.fields.push({name:"offset "+s,type:"USHORT",value:n+i}),e.fields.push({name:"length "+s,type:"USHORT",value:t[s].length})}return e.fields.push({name:"stringPool",type:"CHARARRAY",value:r}),e}function _a(t,e){var r=new T.Parser(t,e),n=r.parseULong();D.argument(n===1,"Unsupported ltag table version."),r.skip("uLong",1);for(var s=r.parseULong(),i=[],o=0;o<s;o++){for(var a="",u=e+r.parseUShort(),l=r.parseUShort(),f=u;f<u+l;++f)a+=String.fromCharCode(t.getInt8(f));i.push(a)}return i}var xi={make:Ya,parse:_a};function ja(t,e){var r={},n=new T.Parser(t,e);return r.version=n.parseVersion(),r.numGlyphs=n.parseUShort(),r.version===1&&(r.maxPoints=n.parseUShort(),r.maxContours=n.parseUShort(),r.maxCompositePoints=n.parseUShort(),r.maxCompositeContours=n.parseUShort(),r.maxZones=n.parseUShort(),r.maxTwilightPoints=n.parseUShort(),r.maxStorage=n.parseUShort(),r.maxFunctionDefs=n.parseUShort(),r.maxInstructionDefs=n.parseUShort(),r.maxStackElements=n.parseUShort(),r.maxSizeOfInstructions=n.parseUShort(),r.maxComponentElements=n.parseUShort(),r.maxComponentDepth=n.parseUShort()),r}function Ka(t){return new w.Table("maxp",[{name:"version",type:"FIXED",value:20480},{name:"numGlyphs",type:"USHORT",value:t}])}var yi={parse:ja,make:Ka},bi=["copyright","fontFamily","fontSubfamily","uniqueID","fullName","version","postScriptName","trademark","manufacturer","designer","description","manufacturerURL","designerURL","license","licenseURL","reserved","preferredFamily","preferredSubfamily","compatibleFullName","sampleText","postScriptFindFontName","wwsFamily","wwsSubfamily"],Si={0:"en",1:"fr",2:"de",3:"it",4:"nl",5:"sv",6:"es",7:"da",8:"pt",9:"no",10:"he",11:"ja",12:"ar",13:"fi",14:"el",15:"is",16:"mt",17:"tr",18:"hr",19:"zh-Hant",20:"ur",21:"hi",22:"th",23:"ko",24:"lt",25:"pl",26:"hu",27:"es",28:"lv",29:"se",30:"fo",31:"fa",32:"ru",33:"zh",34:"nl-BE",35:"ga",36:"sq",37:"ro",38:"cz",39:"sk",40:"si",41:"yi",42:"sr",43:"mk",44:"bg",45:"uk",46:"be",47:"uz",48:"kk",49:"az-Cyrl",50:"az-Arab",51:"hy",52:"ka",53:"mo",54:"ky",55:"tg",56:"tk",57:"mn-CN",58:"mn",59:"ps",60:"ks",61:"ku",62:"sd",63:"bo",64:"ne",65:"sa",66:"mr",67:"bn",68:"as",69:"gu",70:"pa",71:"or",72:"ml",73:"kn",74:"ta",75:"te",76:"si",77:"my",78:"km",79:"lo",80:"vi",81:"id",82:"tl",83:"ms",84:"ms-Arab",85:"am",86:"ti",87:"om",88:"so",89:"sw",90:"rw",91:"rn",92:"ny",93:"mg",94:"eo",128:"cy",129:"eu",130:"ca",131:"la",132:"qu",133:"gn",134:"ay",135:"tt",136:"ug",137:"dz",138:"jv",139:"su",140:"gl",141:"af",142:"br",143:"iu",144:"gd",145:"gv",146:"ga",147:"to",148:"el-polyton",149:"kl",150:"az",151:"nn"},Ja={0:0,1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0,9:0,10:5,11:1,12:4,13:0,14:6,15:0,16:0,17:0,18:0,19:2,20:4,21:9,22:21,23:3,24:29,25:29,26:29,27:29,28:29,29:0,30:0,31:4,32:7,33:25,34:0,35:0,36:0,37:0,38:29,39:29,40:0,41:5,42:7,43:7,44:7,45:7,46:7,47:7,48:7,49:7,50:4,51:24,52:23,53:7,54:7,55:7,56:7,57:27,58:7,59:4,60:4,61:4,62:4,63:26,64:9,65:9,66:9,67:13,68:13,69:11,70:10,71:12,72:17,73:16,74:14,75:15,76:18,77:19,78:20,79:22,80:30,81:0,82:0,83:0,84:4,85:28,86:28,87:28,88:0,89:0,90:0,91:0,92:0,93:0,94:0,128:0,129:0,130:0,131:0,132:0,133:0,134:0,135:7,136:4,137:26,138:0,139:0,140:0,141:0,142:0,143:28,144:0,145:0,146:0,147:0,148:6,149:0,150:0,151:0},ki={1078:"af",1052:"sq",1156:"gsw",1118:"am",5121:"ar-DZ",15361:"ar-BH",3073:"ar",2049:"ar-IQ",11265:"ar-JO",13313:"ar-KW",12289:"ar-LB",4097:"ar-LY",6145:"ary",8193:"ar-OM",16385:"ar-QA",1025:"ar-SA",10241:"ar-SY",7169:"aeb",14337:"ar-AE",9217:"ar-YE",1067:"hy",1101:"as",2092:"az-Cyrl",1068:"az",1133:"ba",1069:"eu",1059:"be",2117:"bn",1093:"bn-IN",8218:"bs-Cyrl",5146:"bs",1150:"br",1026:"bg",1027:"ca",3076:"zh-HK",5124:"zh-MO",2052:"zh",4100:"zh-SG",1028:"zh-TW",1155:"co",1050:"hr",4122:"hr-BA",1029:"cs",1030:"da",1164:"prs",1125:"dv",2067:"nl-BE",1043:"nl",3081:"en-AU",10249:"en-BZ",4105:"en-CA",9225:"en-029",16393:"en-IN",6153:"en-IE",8201:"en-JM",17417:"en-MY",5129:"en-NZ",13321:"en-PH",18441:"en-SG",7177:"en-ZA",11273:"en-TT",2057:"en-GB",1033:"en",12297:"en-ZW",1061:"et",1080:"fo",1124:"fil",1035:"fi",2060:"fr-BE",3084:"fr-CA",1036:"fr",5132:"fr-LU",6156:"fr-MC",4108:"fr-CH",1122:"fy",1110:"gl",1079:"ka",3079:"de-AT",1031:"de",5127:"de-LI",4103:"de-LU",2055:"de-CH",1032:"el",1135:"kl",1095:"gu",1128:"ha",1037:"he",1081:"hi",1038:"hu",1039:"is",1136:"ig",1057:"id",1117:"iu",2141:"iu-Latn",2108:"ga",1076:"xh",1077:"zu",1040:"it",2064:"it-CH",1041:"ja",1099:"kn",1087:"kk",1107:"km",1158:"quc",1159:"rw",1089:"sw",1111:"kok",1042:"ko",1088:"ky",1108:"lo",1062:"lv",1063:"lt",2094:"dsb",1134:"lb",1071:"mk",2110:"ms-BN",1086:"ms",1100:"ml",1082:"mt",1153:"mi",1146:"arn",1102:"mr",1148:"moh",1104:"mn",2128:"mn-CN",1121:"ne",1044:"nb",2068:"nn",1154:"oc",1096:"or",1123:"ps",1045:"pl",1046:"pt",2070:"pt-PT",1094:"pa",1131:"qu-BO",2155:"qu-EC",3179:"qu",1048:"ro",1047:"rm",1049:"ru",9275:"smn",4155:"smj-NO",5179:"smj",3131:"se-FI",1083:"se",2107:"se-SE",8251:"sms",6203:"sma-NO",7227:"sms",1103:"sa",7194:"sr-Cyrl-BA",3098:"sr",6170:"sr-Latn-BA",2074:"sr-Latn",1132:"nso",1074:"tn",1115:"si",1051:"sk",1060:"sl",11274:"es-AR",16394:"es-BO",13322:"es-CL",9226:"es-CO",5130:"es-CR",7178:"es-DO",12298:"es-EC",17418:"es-SV",4106:"es-GT",18442:"es-HN",2058:"es-MX",19466:"es-NI",6154:"es-PA",15370:"es-PY",10250:"es-PE",20490:"es-PR",3082:"es",1034:"es",21514:"es-US",14346:"es-UY",8202:"es-VE",2077:"sv-FI",1053:"sv",1114:"syr",1064:"tg",2143:"tzm",1097:"ta",1092:"tt",1098:"te",1054:"th",1105:"bo",1055:"tr",1090:"tk",1152:"ug",1058:"uk",1070:"hsb",1056:"ur",2115:"uz-Cyrl",1091:"uz",1066:"vi",1106:"cy",1160:"wo",1157:"sah",1144:"ii",1130:"yo"};function Qa(t,e,r){switch(t){case 0:if(e===65535)return"und";if(r)return r[e];break;case 1:return Si[e];case 3:return ki[e]}}var dn="utf-16",eu={0:"macintosh",1:"x-mac-japanese",2:"x-mac-chinesetrad",3:"x-mac-korean",6:"x-mac-greek",7:"x-mac-cyrillic",9:"x-mac-devanagai",10:"x-mac-gurmukhi",11:"x-mac-gujarati",12:"x-mac-oriya",13:"x-mac-bengali",14:"x-mac-tamil",15:"x-mac-telugu",16:"x-mac-kannada",17:"x-mac-malayalam",18:"x-mac-sinhalese",19:"x-mac-burmese",20:"x-mac-khmer",21:"x-mac-thai",22:"x-mac-lao",23:"x-mac-georgian",24:"x-mac-armenian",25:"x-mac-chinesesimp",26:"x-mac-tibetan",27:"x-mac-mongolian",28:"x-mac-ethiopic",29:"x-mac-ce",30:"x-mac-vietnamese",31:"x-mac-extarabic"},tu={15:"x-mac-icelandic",17:"x-mac-turkish",18:"x-mac-croatian",24:"x-mac-ce",25:"x-mac-ce",26:"x-mac-ce",27:"x-mac-ce",28:"x-mac-ce",30:"x-mac-icelandic",37:"x-mac-romanian",38:"x-mac-ce",39:"x-mac-ce",40:"x-mac-ce",143:"x-mac-inuit",146:"x-mac-gaelic"};function Ei(t,e,r){switch(t){case 0:return dn;case 1:return tu[r]||eu[e];case 3:if(e===1||e===10)return dn;break}}function ru(t,e,r){for(var n={},s=new T.Parser(t,e),i=s.parseUShort(),o=s.parseUShort(),a=s.offset+s.parseUShort(),u=0;u<o;u++){var l=s.parseUShort(),f=s.parseUShort(),c=s.parseUShort(),h=s.parseUShort(),p=bi[h]||h,d=s.parseUShort(),x=s.parseUShort(),m=Qa(l,c,r),b=Ei(l,f,c);if(b!==void 0&&m!==void 0){var C=void 0;if(b===dn?C=Et.UTF16(t,a+x,d):C=Et.MACSTRING(t,a+x,d,b),C){var S=n[p];S===void 0&&(S=n[p]={}),S[m]=C}}}var M=0;return i===1&&(M=s.parseUShort()),n}function en(t){var e={};for(var r in t)e[t[r]]=parseInt(r);return e}function ks(t,e,r,n,s,i){return new w.Record("NameRecord",[{name:"platformID",type:"USHORT",value:t},{name:"encodingID",type:"USHORT",value:e},{name:"languageID",type:"USHORT",value:r},{name:"nameID",type:"USHORT",value:n},{name:"length",type:"USHORT",value:s},{name:"offset",type:"USHORT",value:i}])}function nu(t,e){var r=t.length,n=e.length-r+1;e:for(var s=0;s<n;s++)for(;s<n;s++){for(var i=0;i<r;i++)if(e[s+i]!==t[i])continue e;return s}return-1}function Es(t,e){var r=nu(t,e);if(r<0){r=e.length;for(var n=0,s=t.length;n<s;++n)e.push(t[n])}return r}function su(t,e){var r,n=[],s={},i=en(bi);for(var o in t){var a=i[o];if(a===void 0&&(a=o),r=parseInt(a),isNaN(r))throw new Error('Name table entry "'+o+'" does not exist, see nameTableNames for complete list.');s[r]=t[o],n.push(r)}for(var u=en(Si),l=en(ki),f=[],c=[],h=0;h<n.length;h++){r=n[h];var p=s[r];for(var d in p){var x=p[d],m=1,b=u[d],C=Ja[b],S=Ei(m,C,b),M=E.MACSTRING(x,S);M===void 0&&(m=0,b=e.indexOf(d),b<0&&(b=e.length,e.push(d)),C=4,M=E.UTF16(x));var I=Es(M,c);f.push(ks(m,C,b,r,M.length,I));var X=l[d];if(X!==void 0){var O=E.UTF16(x),P=Es(O,c);f.push(ks(3,1,X,r,O.length,P))}}}f.sort(function(se,le){return se.platformID-le.platformID||se.encodingID-le.encodingID||se.languageID-le.languageID||se.nameID-le.nameID});for(var W=new w.Table("name",[{name:"format",type:"USHORT",value:0},{name:"count",type:"USHORT",value:f.length},{name:"stringOffset",type:"USHORT",value:6+f.length*12}]),j=0;j<f.length;j++)W.fields.push({name:"record_"+j,type:"RECORD",value:f[j]});return W.fields.push({name:"strings",type:"LITERAL",value:c}),W}var wi={parse:ru,make:su},gn=[{begin:0,end:127},{begin:128,end:255},{begin:256,end:383},{begin:384,end:591},{begin:592,end:687},{begin:688,end:767},{begin:768,end:879},{begin:880,end:1023},{begin:11392,end:11519},{begin:1024,end:1279},{begin:1328,end:1423},{begin:1424,end:1535},{begin:42240,end:42559},{begin:1536,end:1791},{begin:1984,end:2047},{begin:2304,end:2431},{begin:2432,end:2559},{begin:2560,end:2687},{begin:2688,end:2815},{begin:2816,end:2943},{begin:2944,end:3071},{begin:3072,end:3199},{begin:3200,end:3327},{begin:3328,end:3455},{begin:3584,end:3711},{begin:3712,end:3839},{begin:4256,end:4351},{begin:6912,end:7039},{begin:4352,end:4607},{begin:7680,end:7935},{begin:7936,end:8191},{begin:8192,end:8303},{begin:8304,end:8351},{begin:8352,end:8399},{begin:8400,end:8447},{begin:8448,end:8527},{begin:8528,end:8591},{begin:8592,end:8703},{begin:8704,end:8959},{begin:8960,end:9215},{begin:9216,end:9279},{begin:9280,end:9311},{begin:9312,end:9471},{begin:9472,end:9599},{begin:9600,end:9631},{begin:9632,end:9727},{begin:9728,end:9983},{begin:9984,end:10175},{begin:12288,end:12351},{begin:12352,end:12447},{begin:12448,end:12543},{begin:12544,end:12591},{begin:12592,end:12687},{begin:43072,end:43135},{begin:12800,end:13055},{begin:13056,end:13311},{begin:44032,end:55215},{begin:55296,end:57343},{begin:67840,end:67871},{begin:19968,end:40959},{begin:57344,end:63743},{begin:12736,end:12783},{begin:64256,end:64335},{begin:64336,end:65023},{begin:65056,end:65071},{begin:65040,end:65055},{begin:65104,end:65135},{begin:65136,end:65279},{begin:65280,end:65519},{begin:65520,end:65535},{begin:3840,end:4095},{begin:1792,end:1871},{begin:1920,end:1983},{begin:3456,end:3583},{begin:4096,end:4255},{begin:4608,end:4991},{begin:5024,end:5119},{begin:5120,end:5759},{begin:5760,end:5791},{begin:5792,end:5887},{begin:6016,end:6143},{begin:6144,end:6319},{begin:10240,end:10495},{begin:40960,end:42127},{begin:5888,end:5919},{begin:66304,end:66351},{begin:66352,end:66383},{begin:66560,end:66639},{begin:118784,end:119039},{begin:119808,end:120831},{begin:1044480,end:1048573},{begin:65024,end:65039},{begin:917504,end:917631},{begin:6400,end:6479},{begin:6480,end:6527},{begin:6528,end:6623},{begin:6656,end:6687},{begin:11264,end:11359},{begin:11568,end:11647},{begin:19904,end:19967},{begin:43008,end:43055},{begin:65536,end:65663},{begin:65856,end:65935},{begin:66432,end:66463},{begin:66464,end:66527},{begin:66640,end:66687},{begin:66688,end:66735},{begin:67584,end:67647},{begin:68096,end:68191},{begin:119552,end:119647},{begin:73728,end:74751},{begin:119648,end:119679},{begin:7040,end:7103},{begin:7168,end:7247},{begin:7248,end:7295},{begin:43136,end:43231},{begin:43264,end:43311},{begin:43312,end:43359},{begin:43520,end:43615},{begin:65936,end:65999},{begin:66e3,end:66047},{begin:66208,end:66271},{begin:127024,end:127135}];function iu(t){for(var e=0;e<gn.length;e+=1){var r=gn[e];if(t>=r.begin&&t<r.end)return e}return-1}function ou(t,e){var r={},n=new T.Parser(t,e);r.version=n.parseUShort(),r.xAvgCharWidth=n.parseShort(),r.usWeightClass=n.parseUShort(),r.usWidthClass=n.parseUShort(),r.fsType=n.parseUShort(),r.ySubscriptXSize=n.parseShort(),r.ySubscriptYSize=n.parseShort(),r.ySubscriptXOffset=n.parseShort(),r.ySubscriptYOffset=n.parseShort(),r.ySuperscriptXSize=n.parseShort(),r.ySuperscriptYSize=n.parseShort(),r.ySuperscriptXOffset=n.parseShort(),r.ySuperscriptYOffset=n.parseShort(),r.yStrikeoutSize=n.parseShort(),r.yStrikeoutPosition=n.parseShort(),r.sFamilyClass=n.parseShort(),r.panose=[];for(var s=0;s<10;s++)r.panose[s]=n.parseByte();return r.ulUnicodeRange1=n.parseULong(),r.ulUnicodeRange2=n.parseULong(),r.ulUnicodeRange3=n.parseULong(),r.ulUnicodeRange4=n.parseULong(),r.achVendID=String.fromCharCode(n.parseByte(),n.parseByte(),n.parseByte(),n.parseByte()),r.fsSelection=n.parseUShort(),r.usFirstCharIndex=n.parseUShort(),r.usLastCharIndex=n.parseUShort(),r.sTypoAscender=n.parseShort(),r.sTypoDescender=n.parseShort(),r.sTypoLineGap=n.parseShort(),r.usWinAscent=n.parseUShort(),r.usWinDescent=n.parseUShort(),r.version>=1&&(r.ulCodePageRange1=n.parseULong(),r.ulCodePageRange2=n.parseULong()),r.version>=2&&(r.sxHeight=n.parseShort(),r.sCapHeight=n.parseShort(),r.usDefaultChar=n.parseUShort(),r.usBreakChar=n.parseUShort(),r.usMaxContent=n.parseUShort()),r}function au(t){return new w.Table("OS/2",[{name:"version",type:"USHORT",value:3},{name:"xAvgCharWidth",type:"SHORT",value:0},{name:"usWeightClass",type:"USHORT",value:0},{name:"usWidthClass",type:"USHORT",value:0},{name:"fsType",type:"USHORT",value:0},{name:"ySubscriptXSize",type:"SHORT",value:650},{name:"ySubscriptYSize",type:"SHORT",value:699},{name:"ySubscriptXOffset",type:"SHORT",value:0},{name:"ySubscriptYOffset",type:"SHORT",value:140},{name:"ySuperscriptXSize",type:"SHORT",value:650},{name:"ySuperscriptYSize",type:"SHORT",value:699},{name:"ySuperscriptXOffset",type:"SHORT",value:0},{name:"ySuperscriptYOffset",type:"SHORT",value:479},{name:"yStrikeoutSize",type:"SHORT",value:49},{name:"yStrikeoutPosition",type:"SHORT",value:258},{name:"sFamilyClass",type:"SHORT",value:0},{name:"bFamilyType",type:"BYTE",value:0},{name:"bSerifStyle",type:"BYTE",value:0},{name:"bWeight",type:"BYTE",value:0},{name:"bProportion",type:"BYTE",value:0},{name:"bContrast",type:"BYTE",value:0},{name:"bStrokeVariation",type:"BYTE",value:0},{name:"bArmStyle",type:"BYTE",value:0},{name:"bLetterform",type:"BYTE",value:0},{name:"bMidline",type:"BYTE",value:0},{name:"bXHeight",type:"BYTE",value:0},{name:"ulUnicodeRange1",type:"ULONG",value:0},{name:"ulUnicodeRange2",type:"ULONG",value:0},{name:"ulUnicodeRange3",type:"ULONG",value:0},{name:"ulUnicodeRange4",type:"ULONG",value:0},{name:"achVendID",type:"CHARARRAY",value:"XXXX"},{name:"fsSelection",type:"USHORT",value:0},{name:"usFirstCharIndex",type:"USHORT",value:0},{name:"usLastCharIndex",type:"USHORT",value:0},{name:"sTypoAscender",type:"SHORT",value:0},{name:"sTypoDescender",type:"SHORT",value:0},{name:"sTypoLineGap",type:"SHORT",value:0},{name:"usWinAscent",type:"USHORT",value:0},{name:"usWinDescent",type:"USHORT",value:0},{name:"ulCodePageRange1",type:"ULONG",value:0},{name:"ulCodePageRange2",type:"ULONG",value:0},{name:"sxHeight",type:"SHORT",value:0},{name:"sCapHeight",type:"SHORT",value:0},{name:"usDefaultChar",type:"USHORT",value:0},{name:"usBreakChar",type:"USHORT",value:0},{name:"usMaxContext",type:"USHORT",value:0}],t)}var vn={parse:ou,make:au,unicodeRanges:gn,getUnicodeRange:iu};function uu(t,e){var r={},n=new T.Parser(t,e);switch(r.version=n.parseVersion(),r.italicAngle=n.parseFixed(),r.underlinePosition=n.parseShort(),r.underlineThickness=n.parseShort(),r.isFixedPitch=n.parseULong(),r.minMemType42=n.parseULong(),r.maxMemType42=n.parseULong(),r.minMemType1=n.parseULong(),r.maxMemType1=n.parseULong(),r.version){case 1:r.names=ct.slice();break;case 2:r.numberOfGlyphs=n.parseUShort(),r.glyphNameIndex=new Array(r.numberOfGlyphs);for(var s=0;s<r.numberOfGlyphs;s++)r.glyphNameIndex[s]=n.parseUShort();r.names=[];for(var i=0;i<r.numberOfGlyphs;i++)if(r.glyphNameIndex[i]>=ct.length){var o=n.parseChar();r.names.push(n.parseString(o))}break;case 2.5:r.numberOfGlyphs=n.parseUShort(),r.offset=new Array(r.numberOfGlyphs);for(var a=0;a<r.numberOfGlyphs;a++)r.offset[a]=n.parseChar();break}return r}function lu(){return new w.Table("post",[{name:"version",type:"FIXED",value:196608},{name:"italicAngle",type:"FIXED",value:0},{name:"underlinePosition",type:"FWORD",value:0},{name:"underlineThickness",type:"FWORD",value:0},{name:"isFixedPitch",type:"ULONG",value:0},{name:"minMemType42",type:"ULONG",value:0},{name:"maxMemType42",type:"ULONG",value:0},{name:"minMemType1",type:"ULONG",value:0},{name:"maxMemType1",type:"ULONG",value:0}])}var Pi={parse:uu,make:lu},Oe=new Array(9);Oe[1]=function(){var e=this.offset+this.relativeOffset,r=this.parseUShort();if(r===1)return{substFormat:1,coverage:this.parsePointer(v.coverage),deltaGlyphId:this.parseUShort()};if(r===2)return{substFormat:2,coverage:this.parsePointer(v.coverage),substitute:this.parseOffset16List()};D.assert(!1,"0x"+e.toString(16)+": lookup type 1 format must be 1 or 2.")};Oe[2]=function(){var e=this.parseUShort();return D.argument(e===1,"GSUB Multiple Substitution Subtable identifier-format must be 1"),{substFormat:e,coverage:this.parsePointer(v.coverage),sequences:this.parseListOfLists()}};Oe[3]=function(){var e=this.parseUShort();return D.argument(e===1,"GSUB Alternate Substitution Subtable identifier-format must be 1"),{substFormat:e,coverage:this.parsePointer(v.coverage),alternateSets:this.parseListOfLists()}};Oe[4]=function(){var e=this.parseUShort();return D.argument(e===1,"GSUB ligature table identifier-format must be 1"),{substFormat:e,coverage:this.parsePointer(v.coverage),ligatureSets:this.parseListOfLists(function(){return{ligGlyph:this.parseUShort(),components:this.parseUShortList(this.parseUShort()-1)}})}};var kt={sequenceIndex:v.uShort,lookupListIndex:v.uShort};Oe[5]=function(){var e=this.offset+this.relativeOffset,r=this.parseUShort();if(r===1)return{substFormat:r,coverage:this.parsePointer(v.coverage),ruleSets:this.parseListOfLists(function(){var i=this.parseUShort(),o=this.parseUShort();return{input:this.parseUShortList(i-1),lookupRecords:this.parseRecordList(o,kt)}})};if(r===2)return{substFormat:r,coverage:this.parsePointer(v.coverage),classDef:this.parsePointer(v.classDef),classSets:this.parseListOfLists(function(){var i=this.parseUShort(),o=this.parseUShort();return{classes:this.parseUShortList(i-1),lookupRecords:this.parseRecordList(o,kt)}})};if(r===3){var n=this.parseUShort(),s=this.parseUShort();return{substFormat:r,coverages:this.parseList(n,v.pointer(v.coverage)),lookupRecords:this.parseRecordList(s,kt)}}D.assert(!1,"0x"+e.toString(16)+": lookup type 5 format must be 1, 2 or 3.")};Oe[6]=function(){var e=this.offset+this.relativeOffset,r=this.parseUShort();if(r===1)return{substFormat:1,coverage:this.parsePointer(v.coverage),chainRuleSets:this.parseListOfLists(function(){return{backtrack:this.parseUShortList(),input:this.parseUShortList(this.parseShort()-1),lookahead:this.parseUShortList(),lookupRecords:this.parseRecordList(kt)}})};if(r===2)return{substFormat:2,coverage:this.parsePointer(v.coverage),backtrackClassDef:this.parsePointer(v.classDef),inputClassDef:this.parsePointer(v.classDef),lookaheadClassDef:this.parsePointer(v.classDef),chainClassSet:this.parseListOfLists(function(){return{backtrack:this.parseUShortList(),input:this.parseUShortList(this.parseShort()-1),lookahead:this.parseUShortList(),lookupRecords:this.parseRecordList(kt)}})};if(r===3)return{substFormat:3,backtrackCoverage:this.parseList(v.pointer(v.coverage)),inputCoverage:this.parseList(v.pointer(v.coverage)),lookaheadCoverage:this.parseList(v.pointer(v.coverage)),lookupRecords:this.parseRecordList(kt)};D.assert(!1,"0x"+e.toString(16)+": lookup type 6 format must be 1, 2 or 3.")};Oe[7]=function(){var e=this.parseUShort();D.argument(e===1,"GSUB Extension Substitution subtable identifier-format must be 1");var r=this.parseUShort(),n=new v(this.data,this.offset+this.parseULong());return{substFormat:1,lookupType:r,extension:Oe[r].call(n)}};Oe[8]=function(){var e=this.parseUShort();return D.argument(e===1,"GSUB Reverse Chaining Contextual Single Substitution Subtable identifier-format must be 1"),{substFormat:e,coverage:this.parsePointer(v.coverage),backtrackCoverage:this.parseList(v.pointer(v.coverage)),lookaheadCoverage:this.parseList(v.pointer(v.coverage)),substitutes:this.parseUShortList()}};function fu(t,e){e=e||0;var r=new v(t,e),n=r.parseVersion(1);return D.argument(n===1||n===1.1,"Unsupported GSUB table version."),n===1?{version:n,scripts:r.parseScriptList(),features:r.parseFeatureList(),lookups:r.parseLookupList(Oe)}:{version:n,scripts:r.parseScriptList(),features:r.parseFeatureList(),lookups:r.parseLookupList(Oe),variations:r.parseFeatureVariationsList()}}var wt=new Array(9);wt[1]=function(e){return e.substFormat===1?new w.Table("substitutionTable",[{name:"substFormat",type:"USHORT",value:1},{name:"coverage",type:"TABLE",value:new w.Coverage(e.coverage)},{name:"deltaGlyphID",type:"USHORT",value:e.deltaGlyphId}]):new w.Table("substitutionTable",[{name:"substFormat",type:"USHORT",value:2},{name:"coverage",type:"TABLE",value:new w.Coverage(e.coverage)}].concat(w.ushortList("substitute",e.substitute)))};wt[2]=function(e){return D.assert(e.substFormat===1,"Lookup type 2 substFormat must be 1."),new w.Table("substitutionTable",[{name:"substFormat",type:"USHORT",value:1},{name:"coverage",type:"TABLE",value:new w.Coverage(e.coverage)}].concat(w.tableList("seqSet",e.sequences,function(r){return new w.Table("sequenceSetTable",w.ushortList("sequence",r))})))};wt[3]=function(e){return D.assert(e.substFormat===1,"Lookup type 3 substFormat must be 1."),new w.Table("substitutionTable",[{name:"substFormat",type:"USHORT",value:1},{name:"coverage",type:"TABLE",value:new w.Coverage(e.coverage)}].concat(w.tableList("altSet",e.alternateSets,function(r){return new w.Table("alternateSetTable",w.ushortList("alternate",r))})))};wt[4]=function(e){return D.assert(e.substFormat===1,"Lookup type 4 substFormat must be 1."),new w.Table("substitutionTable",[{name:"substFormat",type:"USHORT",value:1},{name:"coverage",type:"TABLE",value:new w.Coverage(e.coverage)}].concat(w.tableList("ligSet",e.ligatureSets,function(r){return new w.Table("ligatureSetTable",w.tableList("ligature",r,function(n){return new w.Table("ligatureTable",[{name:"ligGlyph",type:"USHORT",value:n.ligGlyph}].concat(w.ushortList("component",n.components,n.components.length+1)))}))})))};wt[6]=function(e){if(e.substFormat===1){var r=new w.Table("chainContextTable",[{name:"substFormat",type:"USHORT",value:e.substFormat},{name:"coverage",type:"TABLE",value:new w.Coverage(e.coverage)}].concat(w.tableList("chainRuleSet",e.chainRuleSets,function(i){return new w.Table("chainRuleSetTable",w.tableList("chainRule",i,function(o){var a=w.ushortList("backtrackGlyph",o.backtrack,o.backtrack.length).concat(w.ushortList("inputGlyph",o.input,o.input.length+1)).concat(w.ushortList("lookaheadGlyph",o.lookahead,o.lookahead.length)).concat(w.ushortList("substitution",[],o.lookupRecords.length));return o.lookupRecords.forEach(function(u,l){a=a.concat({name:"sequenceIndex"+l,type:"USHORT",value:u.sequenceIndex}).concat({name:"lookupListIndex"+l,type:"USHORT",value:u.lookupListIndex})}),new w.Table("chainRuleTable",a)}))})));return r}else if(e.substFormat===2)D.assert(!1,"lookup type 6 format 2 is not yet supported.");else if(e.substFormat===3){var n=[{name:"substFormat",type:"USHORT",value:e.substFormat}];n.push({name:"backtrackGlyphCount",type:"USHORT",value:e.backtrackCoverage.length}),e.backtrackCoverage.forEach(function(i,o){n.push({name:"backtrackCoverage"+o,type:"TABLE",value:new w.Coverage(i)})}),n.push({name:"inputGlyphCount",type:"USHORT",value:e.inputCoverage.length}),e.inputCoverage.forEach(function(i,o){n.push({name:"inputCoverage"+o,type:"TABLE",value:new w.Coverage(i)})}),n.push({name:"lookaheadGlyphCount",type:"USHORT",value:e.lookaheadCoverage.length}),e.lookaheadCoverage.forEach(function(i,o){n.push({name:"lookaheadCoverage"+o,type:"TABLE",value:new w.Coverage(i)})}),n.push({name:"substitutionCount",type:"USHORT",value:e.lookupRecords.length}),e.lookupRecords.forEach(function(i,o){n=n.concat({name:"sequenceIndex"+o,type:"USHORT",value:i.sequenceIndex}).concat({name:"lookupListIndex"+o,type:"USHORT",value:i.lookupListIndex})});var s=new w.Table("chainContextTable",n);return s}D.assert(!1,"lookup type 6 format must be 1, 2 or 3.")};function hu(t){return new w.Table("GSUB",[{name:"version",type:"ULONG",value:65536},{name:"scripts",type:"TABLE",value:new w.ScriptList(t.scripts)},{name:"features",type:"TABLE",value:new w.FeatureList(t.features)},{name:"lookups",type:"TABLE",value:new w.LookupList(t.lookups,wt)}])}var Ii={parse:fu,make:hu};function cu(t,e){var r=new T.Parser(t,e),n=r.parseULong();D.argument(n===1,"Unsupported META table version."),r.parseULong(),r.parseULong();for(var s=r.parseULong(),i={},o=0;o<s;o++){var a=r.parseTag(),u=r.parseULong(),l=r.parseULong(),f=Et.UTF8(t,e+u,l);i[a]=f}return i}function pu(t){var e=Object.keys(t).length,r="",n=16+e*12,s=new w.Table("meta",[{name:"version",type:"ULONG",value:1},{name:"flags",type:"ULONG",value:0},{name:"offset",type:"ULONG",value:n},{name:"numTags",type:"ULONG",value:e}]);for(var i in t){var o=r.length;r+=t[i],s.fields.push({name:"tag "+i,type:"TAG",value:i}),s.fields.push({name:"offset "+i,type:"ULONG",value:n+o}),s.fields.push({name:"length "+i,type:"ULONG",value:t[i].length})}return s.fields.push({name:"stringPool",type:"CHARARRAY",value:r}),s}var Li={parse:cu,make:pu};function ws(t){return Math.log(t)/Math.log(2)|0}function wn(t){for(;t.length%4!==0;)t.push(0);for(var e=0,r=0;r<t.length;r+=4)e+=(t[r]<<24)+(t[r+1]<<16)+(t[r+2]<<8)+t[r+3];return e%=Math.pow(2,32),e}function Ps(t,e,r,n){return new w.Record("Table Record",[{name:"tag",type:"TAG",value:t!==void 0?t:""},{name:"checkSum",type:"ULONG",value:e!==void 0?e:0},{name:"offset",type:"ULONG",value:r!==void 0?r:0},{name:"length",type:"ULONG",value:n!==void 0?n:0}])}function Ti(t){var e=new w.Table("sfnt",[{name:"version",type:"TAG",value:"OTTO"},{name:"numTables",type:"USHORT",value:0},{name:"searchRange",type:"USHORT",value:0},{name:"entrySelector",type:"USHORT",value:0},{name:"rangeShift",type:"USHORT",value:0}]);e.tables=t,e.numTables=t.length;var r=Math.pow(2,ws(e.numTables));e.searchRange=16*r,e.entrySelector=ws(r),e.rangeShift=e.numTables*16-e.searchRange;for(var n=[],s=[],i=e.sizeOf()+Ps().sizeOf()*e.numTables;i%4!==0;)i+=1,s.push({name:"padding",type:"BYTE",value:0});for(var o=0;o<t.length;o+=1){var a=t[o];D.argument(a.tableName.length===4,"Table name"+a.tableName+" is invalid.");var u=a.sizeOf(),l=Ps(a.tableName,wn(a.encode()),i,u);for(n.push({name:l.tag+" Table Record",type:"RECORD",value:l}),s.push({name:a.tableName+" table",type:"RECORD",value:a}),i+=u,D.argument(!isNaN(i),"Something went wrong calculating the offset.");i%4!==0;)i+=1,s.push({name:"padding",type:"BYTE",value:0})}return n.sort(function(f,c){return f.value.tag>c.value.tag?1:-1}),e.fields=e.fields.concat(n),e.fields=e.fields.concat(s),e}function Is(t,e,r){for(var n=0;n<e.length;n+=1){var s=t.charToGlyphIndex(e[n]);if(s>0){var i=t.glyphs.get(s);return i.getMetrics()}}return r}function du(t){for(var e=0,r=0;r<t.length;r+=1)e+=t[r];return e/t.length}function gu(t){for(var e=[],r=[],n=[],s=[],i=[],o=[],a=[],u,l=0,f=0,c=0,h=0,p=0,d=0;d<t.glyphs.length;d+=1){var x=t.glyphs.get(d),m=x.unicode|0;if(isNaN(x.advanceWidth))throw new Error("Glyph "+x.name+" ("+d+"): advanceWidth is not a number.");(u>m||u===void 0)&&m>0&&(u=m),l<m&&(l=m);var b=vn.getUnicodeRange(m);if(b<32)f|=1<<b;else if(b<64)c|=1<<b-32;else if(b<96)h|=1<<b-64;else if(b<123)p|=1<<b-96;else throw new Error("Unicode ranges bits > 123 are reserved for internal usage");if(x.name!==".notdef"){var C=x.getMetrics();e.push(C.xMin),r.push(C.yMin),n.push(C.xMax),s.push(C.yMax),o.push(C.leftSideBearing),a.push(C.rightSideBearing),i.push(x.advanceWidth)}}var S={xMin:Math.min.apply(null,e),yMin:Math.min.apply(null,r),xMax:Math.max.apply(null,n),yMax:Math.max.apply(null,s),advanceWidthMax:Math.max.apply(null,i),advanceWidthAvg:du(i),minLeftSideBearing:Math.min.apply(null,o),maxLeftSideBearing:Math.max.apply(null,o),minRightSideBearing:Math.min.apply(null,a)};S.ascender=t.ascender,S.descender=t.descender;var M=gi.make({flags:3,unitsPerEm:t.unitsPerEm,xMin:S.xMin,yMin:S.yMin,xMax:S.xMax,yMax:S.yMax,lowestRecPPEM:3,createdTimestamp:t.createdTimestamp}),I=vi.make({ascender:S.ascender,descender:S.descender,advanceWidthMax:S.advanceWidthMax,minLeftSideBearing:S.minLeftSideBearing,minRightSideBearing:S.minRightSideBearing,xMaxExtent:S.maxLeftSideBearing+(S.xMax-S.xMin),numberOfHMetrics:t.glyphs.length}),X=yi.make(t.glyphs.length),O=vn.make(Object.assign({xAvgCharWidth:Math.round(S.advanceWidthAvg),usFirstCharIndex:u,usLastCharIndex:l,ulUnicodeRange1:f,ulUnicodeRange2:c,ulUnicodeRange3:h,ulUnicodeRange4:p,sTypoAscender:S.ascender,sTypoDescender:S.descender,sTypoLineGap:0,usWinAscent:S.yMax,usWinDescent:Math.abs(S.yMin),ulCodePageRange1:1,sxHeight:Is(t,"xyvw",{yMax:Math.round(S.ascender/2)}).yMax,sCapHeight:Is(t,"HIKLEFJMNTZBDPRAGOQSUVWXY",S).yMax,usDefaultChar:t.hasChar(" ")?32:0,usBreakChar:t.hasChar(" ")?32:0},t.tables.os2)),P=mi.make(t.glyphs),W=ni.make(t.glyphs),j=t.getEnglishName("fontFamily"),se=t.getEnglishName("fontSubfamily"),le=j+" "+se,pe=t.getEnglishName("postScriptName");pe||(pe=j.replace(/\s/g,"")+"-"+se);var Q={};for(var k in t.names)Q[k]=t.names[k];Q.uniqueID||(Q.uniqueID={en:t.getEnglishName("manufacturer")+":"+le}),Q.postScriptName||(Q.postScriptName={en:pe}),Q.preferredFamily||(Q.preferredFamily=t.names.fontFamily),Q.preferredSubfamily||(Q.preferredSubfamily=t.names.fontSubfamily);var F=[],A=wi.make(Q,F),R=F.length>0?xi.make(F):void 0,N=Pi.make(),G=di.make(t.glyphs,{version:t.getEnglishName("version"),fullName:le,familyName:j,weightName:se,postScriptName:pe,unitsPerEm:t.unitsPerEm,fontBBox:[0,S.yMin,S.ascender,S.advanceWidthMax]}),B=t.metas&&Object.keys(t.metas).length>0?Li.make(t.metas):void 0,$=[M,I,X,O,A,W,N,G,P];R&&$.push(R),t.tables.gsub&&$.push(Ii.make(t.tables.gsub)),B&&$.push(B);for(var re=Ti($),de=re.encode(),ae=wn(de),ge=re.fields,_=!1,me=0;me<ge.length;me+=1)if(ge[me].name==="head table"){ge[me].value.checkSumAdjustment=2981146554-ae,_=!0;break}if(!_)throw new Error("Could not find head table with checkSum to adjust.");return re}var vu={make:Ti,fontToTable:gu,computeCheckSum:wn};function tn(t,e){for(var r=0,n=t.length-1;r<=n;){var s=r+n>>>1,i=t[s].tag;if(i===e)return s;i<e?r=s+1:n=s-1}return-r-1}function Ls(t,e){for(var r=0,n=t.length-1;r<=n;){var s=r+n>>>1,i=t[s];if(i===e)return s;i<e?r=s+1:n=s-1}return-r-1}function Ts(t,e){for(var r,n=0,s=t.length-1;n<=s;){var i=n+s>>>1;r=t[i];var o=r.start;if(o===e)return r;o<e?n=i+1:s=i-1}if(n>0)return r=t[n-1],e>r.end?0:r}function qt(t,e){this.font=t,this.tableName=e}qt.prototype={searchTag:tn,binSearch:Ls,getTable:function(t){var e=this.font.tables[this.tableName];return!e&&t&&(e=this.font.tables[this.tableName]=this.createDefaultTable()),e},getScriptNames:function(){var t=this.getTable();return t?t.scripts.map(function(e){return e.tag}):[]},getDefaultScriptName:function(){var t=this.getTable();if(t){for(var e=!1,r=0;r<t.scripts.length;r++){var n=t.scripts[r].tag;if(n==="DFLT")return n;n==="latn"&&(e=!0)}if(e)return"latn"}},getScriptTable:function(t,e){var r=this.getTable(e);if(r){t=t||"DFLT";var n=r.scripts,s=tn(r.scripts,t);if(s>=0)return n[s].script;if(e){var i={tag:t,script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}};return n.splice(-1-s,0,i),i.script}}},getLangSysTable:function(t,e,r){var n=this.getScriptTable(t,r);if(n){if(!e||e==="dflt"||e==="DFLT")return n.defaultLangSys;var s=tn(n.langSysRecords,e);if(s>=0)return n.langSysRecords[s].langSys;if(r){var i={tag:e,langSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]}};return n.langSysRecords.splice(-1-s,0,i),i.langSys}}},getFeatureTable:function(t,e,r,n){var s=this.getLangSysTable(t,e,n);if(s){for(var i,o=s.featureIndexes,a=this.font.tables[this.tableName].features,u=0;u<o.length;u++)if(i=a[o[u]],i.tag===r)return i.feature;if(n){var l=a.length;return D.assert(l===0||r>=a[l-1].tag,"Features must be added in alphabetical order."),i={tag:r,feature:{params:0,lookupListIndexes:[]}},a.push(i),o.push(l),i.feature}}},getLookupTables:function(t,e,r,n,s){var i=this.getFeatureTable(t,e,r,s),o=[];if(i){for(var a,u=i.lookupListIndexes,l=this.font.tables[this.tableName].lookups,f=0;f<u.length;f++)a=l[u[f]],a.lookupType===n&&o.push(a);if(o.length===0&&s){a={lookupType:n,lookupFlag:0,subtables:[],markFilteringSet:void 0};var c=l.length;return l.push(a),u.push(c),[a]}}return o},getGlyphClass:function(t,e){switch(t.format){case 1:return t.startGlyph<=e&&e<t.startGlyph+t.classes.length?t.classes[e-t.startGlyph]:0;case 2:var r=Ts(t.ranges,e);return r?r.classId:0}},getCoverageIndex:function(t,e){switch(t.format){case 1:var r=Ls(t.glyphs,e);return r>=0?r:-1;case 2:var n=Ts(t.ranges,e);return n?n.index+e-n.start:-1}},expandCoverage:function(t){if(t.format===1)return t.glyphs;for(var e=[],r=t.ranges,n=0;n<r.length;n++)for(var s=r[n],i=s.start,o=s.end,a=i;a<=o;a++)e.push(a);return e}};function Wt(t){qt.call(this,t,"gpos")}Wt.prototype=qt.prototype;Wt.prototype.init=function(){var t=this.getDefaultScriptName();this.defaultKerningTables=this.getKerningTables(t)};Wt.prototype.getKerningValue=function(t,e,r){for(var n=0;n<t.length;n++)for(var s=t[n].subtables,i=0;i<s.length;i++){var o=s[i],a=this.getCoverageIndex(o.coverage,e);if(!(a<0))switch(o.posFormat){case 1:for(var u=o.pairSets[a],l=0;l<u.length;l++){var f=u[l];if(f.secondGlyph===r)return f.value1&&f.value1.xAdvance||0}break;case 2:var c=this.getGlyphClass(o.classDef1,e),h=this.getGlyphClass(o.classDef2,r),p=o.classRecords[c][h];return p.value1&&p.value1.xAdvance||0}}return 0};Wt.prototype.getKerningTables=function(t,e){if(this.font.tables.gpos)return this.getLookupTables(t,e,"kern",2)};function ke(t){qt.call(this,t,"gsub")}function mu(t,e){var r=t.length;if(r!==e.length)return!1;for(var n=0;n<r;n++)if(t[n]!==e[n])return!1;return!0}function Pn(t,e,r){for(var n=t.subtables,s=0;s<n.length;s++){var i=n[s];if(i.substFormat===e)return i}if(r)return n.push(r),r}ke.prototype=qt.prototype;ke.prototype.createDefaultTable=function(){return{version:1,scripts:[{tag:"DFLT",script:{defaultLangSys:{reserved:0,reqFeatureIndex:65535,featureIndexes:[]},langSysRecords:[]}}],features:[],lookups:[]}};ke.prototype.getSingle=function(t,e,r){for(var n=[],s=this.getLookupTables(e,r,t,1),i=0;i<s.length;i++)for(var o=s[i].subtables,a=0;a<o.length;a++){var u=o[a],l=this.expandCoverage(u.coverage),f=void 0;if(u.substFormat===1){var c=u.deltaGlyphId;for(f=0;f<l.length;f++){var h=l[f];n.push({sub:h,by:h+c})}}else{var p=u.substitute;for(f=0;f<l.length;f++)n.push({sub:l[f],by:p[f]})}}return n};ke.prototype.getMultiple=function(t,e,r){for(var n=[],s=this.getLookupTables(e,r,t,2),i=0;i<s.length;i++)for(var o=s[i].subtables,a=0;a<o.length;a++){var u=o[a],l=this.expandCoverage(u.coverage),f=void 0;for(f=0;f<l.length;f++){var c=l[f],h=u.sequences[f];n.push({sub:c,by:h})}}return n};ke.prototype.getAlternates=function(t,e,r){for(var n=[],s=this.getLookupTables(e,r,t,3),i=0;i<s.length;i++)for(var o=s[i].subtables,a=0;a<o.length;a++)for(var u=o[a],l=this.expandCoverage(u.coverage),f=u.alternateSets,c=0;c<l.length;c++)n.push({sub:l[c],by:f[c]});return n};ke.prototype.getLigatures=function(t,e,r){for(var n=[],s=this.getLookupTables(e,r,t,4),i=0;i<s.length;i++)for(var o=s[i].subtables,a=0;a<o.length;a++)for(var u=o[a],l=this.expandCoverage(u.coverage),f=u.ligatureSets,c=0;c<l.length;c++)for(var h=l[c],p=f[c],d=0;d<p.length;d++){var x=p[d];n.push({sub:[h].concat(x.components),by:x.ligGlyph})}return n};ke.prototype.addSingle=function(t,e,r,n){var s=this.getLookupTables(r,n,t,1,!0)[0],i=Pn(s,2,{substFormat:2,coverage:{format:1,glyphs:[]},substitute:[]});D.assert(i.coverage.format===1,"Single: unable to modify coverage table format "+i.coverage.format);var o=e.sub,a=this.binSearch(i.coverage.glyphs,o);a<0&&(a=-1-a,i.coverage.glyphs.splice(a,0,o),i.substitute.splice(a,0,0)),i.substitute[a]=e.by};ke.prototype.addMultiple=function(t,e,r,n){D.assert(e.by instanceof Array&&e.by.length>1,'Multiple: "by" must be an array of two or more ids');var s=this.getLookupTables(r,n,t,2,!0)[0],i=Pn(s,1,{substFormat:1,coverage:{format:1,glyphs:[]},sequences:[]});D.assert(i.coverage.format===1,"Multiple: unable to modify coverage table format "+i.coverage.format);var o=e.sub,a=this.binSearch(i.coverage.glyphs,o);a<0&&(a=-1-a,i.coverage.glyphs.splice(a,0,o),i.sequences.splice(a,0,0)),i.sequences[a]=e.by};ke.prototype.addAlternate=function(t,e,r,n){var s=this.getLookupTables(r,n,t,3,!0)[0],i=Pn(s,1,{substFormat:1,coverage:{format:1,glyphs:[]},alternateSets:[]});D.assert(i.coverage.format===1,"Alternate: unable to modify coverage table format "+i.coverage.format);var o=e.sub,a=this.binSearch(i.coverage.glyphs,o);a<0&&(a=-1-a,i.coverage.glyphs.splice(a,0,o),i.alternateSets.splice(a,0,0)),i.alternateSets[a]=e.by};ke.prototype.addLigature=function(t,e,r,n){var s=this.getLookupTables(r,n,t,4,!0)[0],i=s.subtables[0];i||(i={substFormat:1,coverage:{format:1,glyphs:[]},ligatureSets:[]},s.subtables[0]=i),D.assert(i.coverage.format===1,"Ligature: unable to modify coverage table format "+i.coverage.format);var o=e.sub[0],a=e.sub.slice(1),u={ligGlyph:e.by,components:a},l=this.binSearch(i.coverage.glyphs,o);if(l>=0){for(var f=i.ligatureSets[l],c=0;c<f.length;c++)if(mu(f[c].components,a))return;f.push(u)}else l=-1-l,i.coverage.glyphs.splice(l,0,o),i.ligatureSets.splice(l,0,[u])};ke.prototype.getFeature=function(t,e,r){if(/ss\d\d/.test(t))return this.getSingle(t,e,r);switch(t){case"aalt":case"salt":return this.getSingle(t,e,r).concat(this.getAlternates(t,e,r));case"dlig":case"liga":case"rlig":return this.getLigatures(t,e,r);case"ccmp":return this.getMultiple(t,e,r).concat(this.getLigatures(t,e,r));case"stch":return this.getMultiple(t,e,r)}};ke.prototype.add=function(t,e,r,n){if(/ss\d\d/.test(t))return this.addSingle(t,e,r,n);switch(t){case"aalt":case"salt":return typeof e.by=="number"?this.addSingle(t,e,r,n):this.addAlternate(t,e,r,n);case"dlig":case"liga":case"rlig":return this.addLigature(t,e,r,n);case"ccmp":return e.by instanceof Array?this.addMultiple(t,e,r,n):this.addLigature(t,e,r,n)}};function xu(){return typeof window<"u"}function yu(t){for(var e=new Buffer(t.byteLength),r=new Uint8Array(t),n=0;n<e.length;++n)e[n]=r[n];return e}function Bt(t,e){if(!t)throw e}function Cs(t,e,r,n,s){var i;return(e&n)>0?(i=t.parseByte(),(e&s)===0&&(i=-i),i=r+i):(e&s)>0?i=r:i=r+t.parseShort(),i}function Ci(t,e,r){var n=new T.Parser(e,r);t.numberOfContours=n.parseShort(),t._xMin=n.parseShort(),t._yMin=n.parseShort(),t._xMax=n.parseShort(),t._yMax=n.parseShort();var s,i;if(t.numberOfContours>0){for(var o=t.endPointIndices=[],a=0;a<t.numberOfContours;a+=1)o.push(n.parseUShort());t.instructionLength=n.parseUShort(),t.instructions=[];for(var u=0;u<t.instructionLength;u+=1)t.instructions.push(n.parseByte());var l=o[o.length-1]+1;s=[];for(var f=0;f<l;f+=1)if(i=n.parseByte(),s.push(i),(i&8)>0)for(var c=n.parseByte(),h=0;h<c;h+=1)s.push(i),f+=1;if(D.argument(s.length===l,"Bad flags."),o.length>0){var p=[],d;if(l>0){for(var x=0;x<l;x+=1)i=s[x],d={},d.onCurve=!!(i&1),d.lastPointOfContour=o.indexOf(x)>=0,p.push(d);for(var m=0,b=0;b<l;b+=1)i=s[b],d=p[b],d.x=Cs(n,i,m,2,16),m=d.x;for(var C=0,S=0;S<l;S+=1)i=s[S],d=p[S],d.y=Cs(n,i,C,4,32),C=d.y}t.points=p}else t.points=[]}else if(t.numberOfContours===0)t.points=[];else{t.isComposite=!0,t.points=[],t.components=[];for(var M=!0;M;){s=n.parseUShort();var I={glyphIndex:n.parseUShort(),xScale:1,scale01:0,scale10:0,yScale:1,dx:0,dy:0};(s&1)>0?(s&2)>0?(I.dx=n.parseShort(),I.dy=n.parseShort()):I.matchedPoints=[n.parseUShort(),n.parseUShort()]:(s&2)>0?(I.dx=n.parseChar(),I.dy=n.parseChar()):I.matchedPoints=[n.parseByte(),n.parseByte()],(s&8)>0?I.xScale=I.yScale=n.parseF2Dot14():(s&64)>0?(I.xScale=n.parseF2Dot14(),I.yScale=n.parseF2Dot14()):(s&128)>0&&(I.xScale=n.parseF2Dot14(),I.scale01=n.parseF2Dot14(),I.scale10=n.parseF2Dot14(),I.yScale=n.parseF2Dot14()),t.components.push(I),M=!!(s&32)}if(s&256){t.instructionLength=n.parseUShort(),t.instructions=[];for(var X=0;X<t.instructionLength;X+=1)t.instructions.push(n.parseByte())}}}function rn(t,e){for(var r=[],n=0;n<t.length;n+=1){var s=t[n],i={x:e.xScale*s.x+e.scale01*s.y+e.dx,y:e.scale10*s.x+e.yScale*s.y+e.dy,onCurve:s.onCurve,lastPointOfContour:s.lastPointOfContour};r.push(i)}return r}function bu(t){for(var e=[],r=[],n=0;n<t.length;n+=1){var s=t[n];r.push(s),s.lastPointOfContour&&(e.push(r),r=[])}return D.argument(r.length===0,"There are still points left in the current contour."),e}function Mi(t){var e=new ue;if(!t)return e;for(var r=bu(t),n=0;n<r.length;++n){var s=r[n],i=null,o=s[s.length-1],a=s[0];if(o.onCurve)e.moveTo(o.x,o.y);else if(a.onCurve)e.moveTo(a.x,a.y);else{var u={x:(o.x+a.x)*.5,y:(o.y+a.y)*.5};e.moveTo(u.x,u.y)}for(var l=0;l<s.length;++l)if(i=o,o=a,a=s[(l+1)%s.length],o.onCurve)e.lineTo(o.x,o.y);else{var f=i,c=a;i.onCurve||(f={x:(o.x+i.x)*.5,y:(o.y+i.y)*.5}),a.onCurve||(c={x:(o.x+a.x)*.5,y:(o.y+a.y)*.5}),e.quadraticCurveTo(o.x,o.y,c.x,c.y)}e.closePath()}return e}function Oi(t,e){if(e.isComposite)for(var r=0;r<e.components.length;r+=1){var n=e.components[r],s=t.get(n.glyphIndex);if(s.getPath(),s.points){var i=void 0;if(n.matchedPoints===void 0)i=rn(s.points,n);else{if(n.matchedPoints[0]>e.points.length-1||n.matchedPoints[1]>s.points.length-1)throw Error("Matched points out of range in "+e.name);var o=e.points[n.matchedPoints[0]],a=s.points[n.matchedPoints[1]],u={xScale:n.xScale,scale01:n.scale01,scale10:n.scale10,yScale:n.yScale,dx:0,dy:0};a=rn([a],u)[0],u.dx=o.x-a.x,u.dy=o.y-a.y,i=rn(s.points,u)}e.points=e.points.concat(i)}}return Mi(e.points)}function Su(t,e,r,n){for(var s=new Ve.GlyphSet(n),i=0;i<r.length-1;i+=1){var o=r[i],a=r[i+1];o!==a?s.push(i,Ve.ttfGlyphLoader(n,i,Ci,t,e+o,Oi)):s.push(i,Ve.glyphLoader(n,i))}return s}function ku(t,e,r,n){var s=new Ve.GlyphSet(n);return n._push=function(i){var o=r[i],a=r[i+1];o!==a?s.push(i,Ve.ttfGlyphLoader(n,i,Ci,t,e+o,Oi)):s.push(i,Ve.glyphLoader(n,i))},s}function Eu(t,e,r,n,s){return s.lowMemory?ku(t,e,r,n):Su(t,e,r,n)}var Fi={getPath:Mi,parse:Eu},Ai,dt,Di,mn;function Ui(t){this.font=t,this.getCommands=function(e){return Fi.getPath(e).commands},this._fpgmState=this._prepState=void 0,this._errorState=0}function wu(t){return t}function Ri(t){return Math.sign(t)*Math.round(Math.abs(t))}function Pu(t){return Math.sign(t)*Math.round(Math.abs(t*2))/2}function Iu(t){return Math.sign(t)*(Math.round(Math.abs(t)+.5)-.5)}function Lu(t){return Math.sign(t)*Math.ceil(Math.abs(t))}function Tu(t){return Math.sign(t)*Math.floor(Math.abs(t))}var Ni=function(t){var e=this.srPeriod,r=this.srPhase,n=this.srThreshold,s=1;return t<0&&(t=-t,s=-1),t+=n-r,t=Math.trunc(t/e)*e,t+=r,t<0?r*s:t*s},ze={x:1,y:0,axis:"x",distance:function(t,e,r,n){return(r?t.xo:t.x)-(n?e.xo:e.x)},interpolate:function(t,e,r,n){var s,i,o,a,u,l,f;if(!n||n===this){if(s=t.xo-e.xo,i=t.xo-r.xo,u=e.x-e.xo,l=r.x-r.xo,o=Math.abs(s),a=Math.abs(i),f=o+a,f===0){t.x=t.xo+(u+l)/2;return}t.x=t.xo+(u*a+l*o)/f;return}if(s=n.distance(t,e,!0,!0),i=n.distance(t,r,!0,!0),u=n.distance(e,e,!1,!0),l=n.distance(r,r,!1,!0),o=Math.abs(s),a=Math.abs(i),f=o+a,f===0){ze.setRelative(t,t,(u+l)/2,n,!0);return}ze.setRelative(t,t,(u*a+l*o)/f,n,!0)},normalSlope:Number.NEGATIVE_INFINITY,setRelative:function(t,e,r,n,s){if(!n||n===this){t.x=(s?e.xo:e.x)+r;return}var i=s?e.xo:e.x,o=s?e.yo:e.y,a=i+r*n.x,u=o+r*n.y;t.x=a+(t.y-u)/n.normalSlope},slope:0,touch:function(t){t.xTouched=!0},touched:function(t){return t.xTouched},untouch:function(t){t.xTouched=!1}},qe={x:0,y:1,axis:"y",distance:function(t,e,r,n){return(r?t.yo:t.y)-(n?e.yo:e.y)},interpolate:function(t,e,r,n){var s,i,o,a,u,l,f;if(!n||n===this){if(s=t.yo-e.yo,i=t.yo-r.yo,u=e.y-e.yo,l=r.y-r.yo,o=Math.abs(s),a=Math.abs(i),f=o+a,f===0){t.y=t.yo+(u+l)/2;return}t.y=t.yo+(u*a+l*o)/f;return}if(s=n.distance(t,e,!0,!0),i=n.distance(t,r,!0,!0),u=n.distance(e,e,!1,!0),l=n.distance(r,r,!1,!0),o=Math.abs(s),a=Math.abs(i),f=o+a,f===0){qe.setRelative(t,t,(u+l)/2,n,!0);return}qe.setRelative(t,t,(u*a+l*o)/f,n,!0)},normalSlope:0,setRelative:function(t,e,r,n,s){if(!n||n===this){t.y=(s?e.yo:e.y)+r;return}var i=s?e.xo:e.x,o=s?e.yo:e.y,a=i+r*n.x,u=o+r*n.y;t.y=u+n.normalSlope*(t.x-a)},slope:Number.POSITIVE_INFINITY,touch:function(t){t.yTouched=!0},touched:function(t){return t.yTouched},untouch:function(t){t.yTouched=!1}};Object.freeze(ze);Object.freeze(qe);function $t(t,e){this.x=t,this.y=e,this.axis=void 0,this.slope=e/t,this.normalSlope=-t/e,Object.freeze(this)}$t.prototype.distance=function(t,e,r,n){return this.x*ze.distance(t,e,r,n)+this.y*qe.distance(t,e,r,n)};$t.prototype.interpolate=function(t,e,r,n){var s,i,o,a,u,l,f;if(o=n.distance(t,e,!0,!0),a=n.distance(t,r,!0,!0),s=n.distance(e,e,!1,!0),i=n.distance(r,r,!1,!0),u=Math.abs(o),l=Math.abs(a),f=u+l,f===0){this.setRelative(t,t,(s+i)/2,n,!0);return}this.setRelative(t,t,(s*l+i*u)/f,n,!0)};$t.prototype.setRelative=function(t,e,r,n,s){n=n||this;var i=s?e.xo:e.x,o=s?e.yo:e.y,a=i+r*n.x,u=o+r*n.y,l=n.normalSlope,f=this.slope,c=t.x,h=t.y;t.x=(f*c-l*a+u-h)/(f-l),t.y=f*(t.x-c)+h};$t.prototype.touch=function(t){t.xTouched=!0,t.yTouched=!0};function Zt(t,e){var r=Math.sqrt(t*t+e*e);return t/=r,e/=r,t===1&&e===0?ze:t===0&&e===1?qe:new $t(t,e)}function We(t,e,r,n){this.x=this.xo=Math.round(t*64)/64,this.y=this.yo=Math.round(e*64)/64,this.lastPointOfContour=r,this.onCurve=n,this.prevPointOnContour=void 0,this.nextPointOnContour=void 0,this.xTouched=!1,this.yTouched=!1,Object.preventExtensions(this)}We.prototype.nextTouched=function(t){for(var e=this.nextPointOnContour;!t.touched(e)&&e!==this;)e=e.nextPointOnContour;return e};We.prototype.prevTouched=function(t){for(var e=this.prevPointOnContour;!t.touched(e)&&e!==this;)e=e.prevPointOnContour;return e};var Xt=Object.freeze(new We(0,0)),Cu={cvCutIn:17/16,deltaBase:9,deltaShift:.125,loop:1,minDis:1,autoFlip:!0};function tt(t,e){switch(this.env=t,this.stack=[],this.prog=e,t){case"glyf":this.zp0=this.zp1=this.zp2=1,this.rp0=this.rp1=this.rp2=0;case"prep":this.fv=this.pv=this.dpv=ze,this.round=Ri}}Ui.prototype.exec=function(t,e){if(typeof e!="number")throw new Error("Point size is not a number!");if(!(this._errorState>2)){var r=this.font,n=this._prepState;if(!n||n.ppem!==e){var s=this._fpgmState;if(!s){tt.prototype=Cu,s=this._fpgmState=new tt("fpgm",r.tables.fpgm),s.funcs=[],s.font=r,exports.DEBUG&&(console.log("---EXEC FPGM---"),s.step=-1);try{dt(s)}catch(l){console.log("Hinting error in FPGM:"+l),this._errorState=3;return}}tt.prototype=s,n=this._prepState=new tt("prep",r.tables.prep),n.ppem=e;var i=r.tables.cvt;if(i)for(var o=n.cvt=new Array(i.length),a=e/r.unitsPerEm,u=0;u<i.length;u++)o[u]=i[u]*a;else n.cvt=[];exports.DEBUG&&(console.log("---EXEC PREP---"),n.step=-1);try{dt(n)}catch(l){this._errorState<2&&console.log("Hinting error in PREP:"+l),this._errorState=2}}if(!(this._errorState>1))try{return Di(t,n)}catch(l){this._errorState<1&&(console.log("Hinting error:"+l),console.log("Note: further hinting errors are silenced")),this._errorState=1;return}}};Di=function(t,e){var r=e.ppem/e.font.unitsPerEm,n=r,s=t.components,i,o,a;if(tt.prototype=e,!s)a=new tt("glyf",t.instructions),exports.DEBUG&&(console.log("---EXEC GLYPH---"),a.step=-1),mn(t,a,r,n),o=a.gZone;else{var u=e.font;o=[],i=[];for(var l=0;l<s.length;l++){var f=s[l],c=u.glyphs.get(f.glyphIndex);a=new tt("glyf",c.instructions),exports.DEBUG&&(console.log("---EXEC COMP "+l+"---"),a.step=-1),mn(c,a,r,n);for(var h=Math.round(f.dx*r),p=Math.round(f.dy*n),d=a.gZone,x=a.contours,m=0;m<d.length;m++){var b=d[m];b.xTouched=b.yTouched=!1,b.xo=b.x=b.x+h,b.yo=b.y=b.y+p}var C=o.length;o.push.apply(o,d);for(var S=0;S<x.length;S++)i.push(x[S]+C)}t.instructions&&!a.inhibitGridFit&&(a=new tt("glyf",t.instructions),a.gZone=a.z0=a.z1=a.z2=o,a.contours=i,o.push(new We(0,0),new We(Math.round(t.advanceWidth*r),0)),exports.DEBUG&&(console.log("---EXEC COMPOSITE---"),a.step=-1),dt(a),o.length-=2)}return o};mn=function(t,e,r,n){for(var s=t.points||[],i=s.length,o=e.gZone=e.z0=e.z1=e.z2=[],a=e.contours=[],u,l=0;l<i;l++)u=s[l],o[l]=new We(u.x*r,u.y*n,u.lastPointOfContour,u.onCurve);for(var f,c,h=0;h<i;h++)u=o[h],f||(f=u,a.push(h)),u.lastPointOfContour?(u.nextPointOnContour=f,f.prevPointOnContour=u,f=void 0):(c=o[h+1],u.nextPointOnContour=c,c.prevPointOnContour=u);if(!e.inhibitGridFit){if(exports.DEBUG){console.log("PROCESSING GLYPH",e.stack);for(var p=0;p<i;p++)console.log(p,o[p].x,o[p].y)}if(o.push(new We(0,0),new We(Math.round(t.advanceWidth*r),0)),dt(e),o.length-=2,exports.DEBUG){console.log("FINISHED GLYPH",e.stack);for(var d=0;d<i;d++)console.log(d,o[d].x,o[d].y)}}};dt=function(t){var e=t.prog;if(e){var r=e.length,n;for(t.ip=0;t.ip<r;t.ip++){if(exports.DEBUG&&t.step++,n=Ai[e[t.ip]],!n)throw new Error("unknown instruction: 0x"+Number(e[t.ip]).toString(16));n(t)}}};function Or(t){for(var e=t.tZone=new Array(t.gZone.length),r=0;r<e.length;r++)e[r]=new We(0,0)}function Bi(t,e){var r=t.prog,n=t.ip,s=1,i;do if(i=r[++n],i===88)s++;else if(i===89)s--;else if(i===64)n+=r[n+1]+1;else if(i===65)n+=2*r[n+1]+1;else if(i>=176&&i<=183)n+=i-176+1;else if(i>=184&&i<=191)n+=(i-184+1)*2;else if(e&&s===1&&i===27)break;while(s>0);t.ip=n}function Ms(t,e){exports.DEBUG&&console.log(e.step,"SVTCA["+t.axis+"]"),e.fv=e.pv=e.dpv=t}function Os(t,e){exports.DEBUG&&console.log(e.step,"SPVTCA["+t.axis+"]"),e.pv=e.dpv=t}function Fs(t,e){exports.DEBUG&&console.log(e.step,"SFVTCA["+t.axis+"]"),e.fv=t}function As(t,e){var r=e.stack,n=r.pop(),s=r.pop(),i=e.z2[n],o=e.z1[s];exports.DEBUG&&console.log("SPVTL["+t+"]",n,s);var a,u;t?(a=i.y-o.y,u=o.x-i.x):(a=o.x-i.x,u=o.y-i.y),e.pv=e.dpv=Zt(a,u)}function Ds(t,e){var r=e.stack,n=r.pop(),s=r.pop(),i=e.z2[n],o=e.z1[s];exports.DEBUG&&console.log("SFVTL["+t+"]",n,s);var a,u;t?(a=i.y-o.y,u=o.x-i.x):(a=o.x-i.x,u=o.y-i.y),e.fv=Zt(a,u)}function Mu(t){var e=t.stack,r=e.pop(),n=e.pop();exports.DEBUG&&console.log(t.step,"SPVFS[]",r,n),t.pv=t.dpv=Zt(n,r)}function Ou(t){var e=t.stack,r=e.pop(),n=e.pop();exports.DEBUG&&console.log(t.step,"SPVFS[]",r,n),t.fv=Zt(n,r)}function Fu(t){var e=t.stack,r=t.pv;exports.DEBUG&&console.log(t.step,"GPV[]"),e.push(r.x*16384),e.push(r.y*16384)}function Au(t){var e=t.stack,r=t.fv;exports.DEBUG&&console.log(t.step,"GFV[]"),e.push(r.x*16384),e.push(r.y*16384)}function Du(t){t.fv=t.pv,exports.DEBUG&&console.log(t.step,"SFVTPV[]")}function Uu(t){var e=t.stack,r=e.pop(),n=e.pop(),s=e.pop(),i=e.pop(),o=e.pop(),a=t.z0,u=t.z1,l=a[r],f=a[n],c=u[s],h=u[i],p=t.z2[o];exports.DEBUG&&console.log("ISECT[], ",r,n,s,i,o);var d=l.x,x=l.y,m=f.x,b=f.y,C=c.x,S=c.y,M=h.x,I=h.y,X=(d-m)*(S-I)-(x-b)*(C-M),O=d*b-x*m,P=C*I-S*M;p.x=(O*(C-M)-P*(d-m))/X,p.y=(O*(S-I)-P*(x-b))/X}function Ru(t){t.rp0=t.stack.pop(),exports.DEBUG&&console.log(t.step,"SRP0[]",t.rp0)}function Nu(t){t.rp1=t.stack.pop(),exports.DEBUG&&console.log(t.step,"SRP1[]",t.rp1)}function Bu(t){t.rp2=t.stack.pop(),exports.DEBUG&&console.log(t.step,"SRP2[]",t.rp2)}function Gu(t){var e=t.stack.pop();switch(exports.DEBUG&&console.log(t.step,"SZP0[]",e),t.zp0=e,e){case 0:t.tZone||Or(t),t.z0=t.tZone;break;case 1:t.z0=t.gZone;break;default:throw new Error("Invalid zone pointer")}}function Hu(t){var e=t.stack.pop();switch(exports.DEBUG&&console.log(t.step,"SZP1[]",e),t.zp1=e,e){case 0:t.tZone||Or(t),t.z1=t.tZone;break;case 1:t.z1=t.gZone;break;default:throw new Error("Invalid zone pointer")}}function zu(t){var e=t.stack.pop();switch(exports.DEBUG&&console.log(t.step,"SZP2[]",e),t.zp2=e,e){case 0:t.tZone||Or(t),t.z2=t.tZone;break;case 1:t.z2=t.gZone;break;default:throw new Error("Invalid zone pointer")}}function Vu(t){var e=t.stack.pop();switch(exports.DEBUG&&console.log(t.step,"SZPS[]",e),t.zp0=t.zp1=t.zp2=e,e){case 0:t.tZone||Or(t),t.z0=t.z1=t.z2=t.tZone;break;case 1:t.z0=t.z1=t.z2=t.gZone;break;default:throw new Error("Invalid zone pointer")}}function Xu(t){t.loop=t.stack.pop(),exports.DEBUG&&console.log(t.step,"SLOOP[]",t.loop)}function qu(t){exports.DEBUG&&console.log(t.step,"RTG[]"),t.round=Ri}function Wu(t){exports.DEBUG&&console.log(t.step,"RTHG[]"),t.round=Iu}function $u(t){var e=t.stack.pop();exports.DEBUG&&console.log(t.step,"SMD[]",e),t.minDis=e/64}function Zu(t){exports.DEBUG&&console.log(t.step,"ELSE[]"),Bi(t,!1)}function Yu(t){var e=t.stack.pop();exports.DEBUG&&console.log(t.step,"JMPR[]",e),t.ip+=e-1}function _u(t){var e=t.stack.pop();exports.DEBUG&&console.log(t.step,"SCVTCI[]",e),t.cvCutIn=e/64}function ju(t){var e=t.stack;exports.DEBUG&&console.log(t.step,"DUP[]"),e.push(e[e.length-1])}function nn(t){exports.DEBUG&&console.log(t.step,"POP[]"),t.stack.pop()}function Ku(t){exports.DEBUG&&console.log(t.step,"CLEAR[]"),t.stack.length=0}function Ju(t){var e=t.stack,r=e.pop(),n=e.pop();exports.DEBUG&&console.log(t.step,"SWAP[]"),e.push(r),e.push(n)}function Qu(t){var e=t.stack;exports.DEBUG&&console.log(t.step,"DEPTH[]"),e.push(e.length)}function el(t){var e=t.stack,r=e.pop(),n=e.pop();exports.DEBUG&&console.log(t.step,"LOOPCALL[]",r,n);var s=t.ip,i=t.prog;t.prog=t.funcs[r];for(var o=0;o<n;o++)dt(t),exports.DEBUG&&console.log(++t.step,o+1<n?"next loopcall":"done loopcall",o);t.ip=s,t.prog=i}function tl(t){var e=t.stack.pop();exports.DEBUG&&console.log(t.step,"CALL[]",e);var r=t.ip,n=t.prog;t.prog=t.funcs[e],dt(t),t.ip=r,t.prog=n,exports.DEBUG&&console.log(++t.step,"returning from",e)}function rl(t){var e=t.stack,r=e.pop();exports.DEBUG&&console.log(t.step,"CINDEX[]",r),e.push(e[e.length-r])}function nl(t){var e=t.stack,r=e.pop();exports.DEBUG&&console.log(t.step,"MINDEX[]",r),e.push(e.splice(e.length-r,1)[0])}function sl(t){if(t.env!=="fpgm")throw new Error("FDEF not allowed here");var e=t.stack,r=t.prog,n=t.ip,s=e.pop(),i=n;for(exports.DEBUG&&console.log(t.step,"FDEF[]",s);r[++n]!==45;);t.ip=n,t.funcs[s]=r.slice(i+1,n)}function Us(t,e){var r=e.stack.pop(),n=e.z0[r],s=e.fv,i=e.pv;exports.DEBUG&&console.log(e.step,"MDAP["+t+"]",r);var o=i.distance(n,Xt);t&&(o=e.round(o)),s.setRelative(n,Xt,o,i),s.touch(n),e.rp0=e.rp1=r}function Rs(t,e){var r=e.z2,n=r.length-2,s,i,o;exports.DEBUG&&console.log(e.step,"IUP["+t.axis+"]");for(var a=0;a<n;a++)s=r[a],!t.touched(s)&&(i=s.prevTouched(t),i!==s&&(o=s.nextTouched(t),i===o&&t.setRelative(s,s,t.distance(i,i,!1,!0),t,!0),t.interpolate(s,i,o,t)))}function Ns(t,e){for(var r=e.stack,n=t?e.rp1:e.rp2,s=(t?e.z0:e.z1)[n],i=e.fv,o=e.pv,a=e.loop,u=e.z2;a--;){var l=r.pop(),f=u[l],c=o.distance(s,s,!1,!0);i.setRelative(f,f,c,o),i.touch(f),exports.DEBUG&&console.log(e.step,(e.loop>1?"loop "+(e.loop-a)+": ":"")+"SHP["+(t?"rp1":"rp2")+"]",l)}e.loop=1}function Bs(t,e){var r=e.stack,n=t?e.rp1:e.rp2,s=(t?e.z0:e.z1)[n],i=e.fv,o=e.pv,a=r.pop(),u=e.z2[e.contours[a]],l=u;exports.DEBUG&&console.log(e.step,"SHC["+t+"]",a);var f=o.distance(s,s,!1,!0);do l!==s&&i.setRelative(l,l,f,o),l=l.nextPointOnContour;while(l!==u)}function Gs(t,e){var r=e.stack,n=t?e.rp1:e.rp2,s=(t?e.z0:e.z1)[n],i=e.fv,o=e.pv,a=r.pop();exports.DEBUG&&console.log(e.step,"SHZ["+t+"]",a);var u;switch(a){case 0:u=e.tZone;break;case 1:u=e.gZone;break;default:throw new Error("Invalid zone")}for(var l,f=o.distance(s,s,!1,!0),c=u.length-2,h=0;h<c;h++)l=u[h],i.setRelative(l,l,f,o)}function il(t){for(var e=t.stack,r=t.loop,n=t.fv,s=e.pop()/64,i=t.z2;r--;){var o=e.pop(),a=i[o];exports.DEBUG&&console.log(t.step,(t.loop>1?"loop "+(t.loop-r)+": ":"")+"SHPIX[]",o,s),n.setRelative(a,a,s),n.touch(a)}t.loop=1}function ol(t){for(var e=t.stack,r=t.rp1,n=t.rp2,s=t.loop,i=t.z0[r],o=t.z1[n],a=t.fv,u=t.dpv,l=t.z2;s--;){var f=e.pop(),c=l[f];exports.DEBUG&&console.log(t.step,(t.loop>1?"loop "+(t.loop-s)+": ":"")+"IP[]",f,r,"<->",n),a.interpolate(c,i,o,u),a.touch(c)}t.loop=1}function Hs(t,e){var r=e.stack,n=r.pop()/64,s=r.pop(),i=e.z1[s],o=e.z0[e.rp0],a=e.fv,u=e.pv;a.setRelative(i,o,n,u),a.touch(i),exports.DEBUG&&console.log(e.step,"MSIRP["+t+"]",n,s),e.rp1=e.rp0,e.rp2=s,t&&(e.rp0=s)}function al(t){for(var e=t.stack,r=t.rp0,n=t.z0[r],s=t.loop,i=t.fv,o=t.pv,a=t.z1;s--;){var u=e.pop(),l=a[u];exports.DEBUG&&console.log(t.step,(t.loop>1?"loop "+(t.loop-s)+": ":"")+"ALIGNRP[]",u),i.setRelative(l,n,0,o),i.touch(l)}t.loop=1}function ul(t){exports.DEBUG&&console.log(t.step,"RTDG[]"),t.round=Pu}function zs(t,e){var r=e.stack,n=r.pop(),s=r.pop(),i=e.z0[s],o=e.fv,a=e.pv,u=e.cvt[n];exports.DEBUG&&console.log(e.step,"MIAP["+t+"]",n,"(",u,")",s);var l=a.distance(i,Xt);t&&(Math.abs(l-u)<e.cvCutIn&&(l=u),l=e.round(l)),o.setRelative(i,Xt,l,a),e.zp0===0&&(i.xo=i.x,i.yo=i.y),o.touch(i),e.rp0=e.rp1=s}function ll(t){var e=t.prog,r=t.ip,n=t.stack,s=e[++r];exports.DEBUG&&console.log(t.step,"NPUSHB[]",s);for(var i=0;i<s;i++)n.push(e[++r]);t.ip=r}function fl(t){var e=t.ip,r=t.prog,n=t.stack,s=r[++e];exports.DEBUG&&console.log(t.step,"NPUSHW[]",s);for(var i=0;i<s;i++){var o=r[++e]<<8|r[++e];o&32768&&(o=-((o^65535)+1)),n.push(o)}t.ip=e}function hl(t){var e=t.stack,r=t.store;r||(r=t.store=[]);var n=e.pop(),s=e.pop();exports.DEBUG&&console.log(t.step,"WS",n,s),r[s]=n}function cl(t){var e=t.stack,r=t.store,n=e.pop();exports.DEBUG&&console.log(t.step,"RS",n);var s=r&&r[n]||0;e.push(s)}function pl(t){var e=t.stack,r=e.pop(),n=e.pop();exports.DEBUG&&console.log(t.step,"WCVTP",r,n),t.cvt[n]=r/64}function dl(t){var e=t.stack,r=e.pop();exports.DEBUG&&console.log(t.step,"RCVT",r),e.push(t.cvt[r]*64)}function Vs(t,e){var r=e.stack,n=r.pop(),s=e.z2[n];exports.DEBUG&&console.log(e.step,"GC["+t+"]",n),r.push(e.dpv.distance(s,Xt,t,!1)*64)}function Xs(t,e){var r=e.stack,n=r.pop(),s=r.pop(),i=e.z1[n],o=e.z0[s],a=e.dpv.distance(o,i,t,t);exports.DEBUG&&console.log(e.step,"MD["+t+"]",n,s,"->",a),e.stack.push(Math.round(a*64))}function gl(t){exports.DEBUG&&console.log(t.step,"MPPEM[]"),t.stack.push(t.ppem)}function vl(t){exports.DEBUG&&console.log(t.step,"FLIPON[]"),t.autoFlip=!0}function ml(t){var e=t.stack,r=e.pop(),n=e.pop();exports.DEBUG&&console.log(t.step,"LT[]",r,n),e.push(n<r?1:0)}function xl(t){var e=t.stack,r=e.pop(),n=e.pop();exports.DEBUG&&console.log(t.step,"LTEQ[]",r,n),e.push(n<=r?1:0)}function yl(t){var e=t.stack,r=e.pop(),n=e.pop();exports.DEBUG&&console.log(t.step,"GT[]",r,n),e.push(n>r?1:0)}function bl(t){var e=t.stack,r=e.pop(),n=e.pop();exports.DEBUG&&console.log(t.step,"GTEQ[]",r,n),e.push(n>=r?1:0)}function Sl(t){var e=t.stack,r=e.pop(),n=e.pop();exports.DEBUG&&console.log(t.step,"EQ[]",r,n),e.push(r===n?1:0)}function kl(t){var e=t.stack,r=e.pop(),n=e.pop();exports.DEBUG&&console.log(t.step,"NEQ[]",r,n),e.push(r!==n?1:0)}function El(t){var e=t.stack,r=e.pop();exports.DEBUG&&console.log(t.step,"ODD[]",r),e.push(Math.trunc(r)%2?1:0)}function wl(t){var e=t.stack,r=e.pop();exports.DEBUG&&console.log(t.step,"EVEN[]",r),e.push(Math.trunc(r)%2?0:1)}function Pl(t){var e=t.stack.pop();exports.DEBUG&&console.log(t.step,"IF[]",e),e||(Bi(t,!0),exports.DEBUG&&console.log(t.step,"EIF[]"))}function Il(t){exports.DEBUG&&console.log(t.step,"EIF[]")}function Ll(t){var e=t.stack,r=e.pop(),n=e.pop();exports.DEBUG&&console.log(t.step,"AND[]",r,n),e.push(r&&n?1:0)}function Tl(t){var e=t.stack,r=e.pop(),n=e.pop();exports.DEBUG&&console.log(t.step,"OR[]",r,n),e.push(r||n?1:0)}function Cl(t){var e=t.stack,r=e.pop();exports.DEBUG&&console.log(t.step,"NOT[]",r),e.push(r?0:1)}function sn(t,e){var r=e.stack,n=r.pop(),s=e.fv,i=e.pv,o=e.ppem,a=e.deltaBase+(t-1)*16,u=e.deltaShift,l=e.z0;exports.DEBUG&&console.log(e.step,"DELTAP["+t+"]",n,r);for(var f=0;f<n;f++){var c=r.pop(),h=r.pop(),p=a+((h&240)>>4);if(p===o){var d=(h&15)-8;d>=0&&d++,exports.DEBUG&&console.log(e.step,"DELTAPFIX",c,"by",d*u);var x=l[c];s.setRelative(x,x,d*u,i)}}}function Ml(t){var e=t.stack,r=e.pop();exports.DEBUG&&console.log(t.step,"SDB[]",r),t.deltaBase=r}function Ol(t){var e=t.stack,r=e.pop();exports.DEBUG&&console.log(t.step,"SDS[]",r),t.deltaShift=Math.pow(.5,r)}function Fl(t){var e=t.stack,r=e.pop(),n=e.pop();exports.DEBUG&&console.log(t.step,"ADD[]",r,n),e.push(n+r)}function Al(t){var e=t.stack,r=e.pop(),n=e.pop();exports.DEBUG&&console.log(t.step,"SUB[]",r,n),e.push(n-r)}function Dl(t){var e=t.stack,r=e.pop(),n=e.pop();exports.DEBUG&&console.log(t.step,"DIV[]",r,n),e.push(n*64/r)}function Ul(t){var e=t.stack,r=e.pop(),n=e.pop();exports.DEBUG&&console.log(t.step,"MUL[]",r,n),e.push(n*r/64)}function Rl(t){var e=t.stack,r=e.pop();exports.DEBUG&&console.log(t.step,"ABS[]",r),e.push(Math.abs(r))}function Nl(t){var e=t.stack,r=e.pop();exports.DEBUG&&console.log(t.step,"NEG[]",r),e.push(-r)}function Bl(t){var e=t.stack,r=e.pop();exports.DEBUG&&console.log(t.step,"FLOOR[]",r),e.push(Math.floor(r/64)*64)}function Gl(t){var e=t.stack,r=e.pop();exports.DEBUG&&console.log(t.step,"CEILING[]",r),e.push(Math.ceil(r/64)*64)}function kr(t,e){var r=e.stack,n=r.pop();exports.DEBUG&&console.log(e.step,"ROUND[]"),r.push(e.round(n/64)*64)}function Hl(t){var e=t.stack,r=e.pop(),n=e.pop();exports.DEBUG&&console.log(t.step,"WCVTF[]",r,n),t.cvt[n]=r*t.ppem/t.font.unitsPerEm}function on(t,e){var r=e.stack,n=r.pop(),s=e.ppem,i=e.deltaBase+(t-1)*16,o=e.deltaShift;exports.DEBUG&&console.log(e.step,"DELTAC["+t+"]",n,r);for(var a=0;a<n;a++){var u=r.pop(),l=r.pop(),f=i+((l&240)>>4);if(f===s){var c=(l&15)-8;c>=0&&c++;var h=c*o;exports.DEBUG&&console.log(e.step,"DELTACFIX",u,"by",h),e.cvt[u]+=h}}}function zl(t){var e=t.stack.pop();exports.DEBUG&&console.log(t.step,"SROUND[]",e),t.round=Ni;var r;switch(e&192){case 0:r=.5;break;case 64:r=1;break;case 128:r=2;break;default:throw new Error("invalid SROUND value")}switch(t.srPeriod=r,e&48){case 0:t.srPhase=0;break;case 16:t.srPhase=.25*r;break;case 32:t.srPhase=.5*r;break;case 48:t.srPhase=.75*r;break;default:throw new Error("invalid SROUND value")}e&=15,e===0?t.srThreshold=0:t.srThreshold=(e/8-.5)*r}function Vl(t){var e=t.stack.pop();exports.DEBUG&&console.log(t.step,"S45ROUND[]",e),t.round=Ni;var r;switch(e&192){case 0:r=Math.sqrt(2)/2;break;case 64:r=Math.sqrt(2);break;case 128:r=2*Math.sqrt(2);break;default:throw new Error("invalid S45ROUND value")}switch(t.srPeriod=r,e&48){case 0:t.srPhase=0;break;case 16:t.srPhase=.25*r;break;case 32:t.srPhase=.5*r;break;case 48:t.srPhase=.75*r;break;default:throw new Error("invalid S45ROUND value")}e&=15,e===0?t.srThreshold=0:t.srThreshold=(e/8-.5)*r}function Xl(t){exports.DEBUG&&console.log(t.step,"ROFF[]"),t.round=wu}function ql(t){exports.DEBUG&&console.log(t.step,"RUTG[]"),t.round=Lu}function Wl(t){exports.DEBUG&&console.log(t.step,"RDTG[]"),t.round=Tu}function $l(t){var e=t.stack.pop();exports.DEBUG&&console.log(t.step,"SCANCTRL[]",e)}function qs(t,e){var r=e.stack,n=r.pop(),s=r.pop(),i=e.z2[n],o=e.z1[s];exports.DEBUG&&console.log(e.step,"SDPVTL["+t+"]",n,s);var a,u;t?(a=i.y-o.y,u=o.x-i.x):(a=o.x-i.x,u=o.y-i.y),e.dpv=Zt(a,u)}function Zl(t){var e=t.stack,r=e.pop(),n=0;exports.DEBUG&&console.log(t.step,"GETINFO[]",r),r&1&&(n=35),r&32&&(n|=4096),e.push(n)}function Yl(t){var e=t.stack,r=e.pop(),n=e.pop(),s=e.pop();exports.DEBUG&&console.log(t.step,"ROLL[]"),e.push(n),e.push(r),e.push(s)}function _l(t){var e=t.stack,r=e.pop(),n=e.pop();exports.DEBUG&&console.log(t.step,"MAX[]",r,n),e.push(Math.max(n,r))}function jl(t){var e=t.stack,r=e.pop(),n=e.pop();exports.DEBUG&&console.log(t.step,"MIN[]",r,n),e.push(Math.min(n,r))}function Kl(t){var e=t.stack.pop();exports.DEBUG&&console.log(t.step,"SCANTYPE[]",e)}function Jl(t){var e=t.stack.pop(),r=t.stack.pop();switch(exports.DEBUG&&console.log(t.step,"INSTCTRL[]",e,r),e){case 1:t.inhibitGridFit=!!r;return;case 2:t.ignoreCvt=!!r;return;default:throw new Error("invalid INSTCTRL[] selector")}}function Je(t,e){var r=e.stack,n=e.prog,s=e.ip;exports.DEBUG&&console.log(e.step,"PUSHB["+t+"]");for(var i=0;i<t;i++)r.push(n[++s]);e.ip=s}function Qe(t,e){var r=e.ip,n=e.prog,s=e.stack;exports.DEBUG&&console.log(e.ip,"PUSHW["+t+"]");for(var i=0;i<t;i++){var o=n[++r]<<8|n[++r];o&32768&&(o=-((o^65535)+1)),s.push(o)}e.ip=r}function L(t,e,r,n,s,i){var o=i.stack,a=t&&o.pop(),u=o.pop(),l=i.rp0,f=i.z0[l],c=i.z1[u],h=i.minDis,p=i.fv,d=i.dpv,x,m,b,C;m=x=d.distance(c,f,!0,!0),b=m>=0?1:-1,m=Math.abs(m),t&&(C=i.cvt[a],n&&Math.abs(m-C)<i.cvCutIn&&(m=C)),r&&m<h&&(m=h),n&&(m=i.round(m)),p.setRelative(c,f,b*m,d),p.touch(c),exports.DEBUG&&console.log(i.step,(t?"MIRP[":"MDRP[")+(e?"M":"m")+(r?">":"_")+(n?"R":"_")+(s===0?"Gr":s===1?"Bl":s===2?"Wh":"")+"]",t?a+"("+i.cvt[a]+","+C+")":"",u,"(d =",x,"->",b*m,")"),i.rp1=i.rp0,i.rp2=u,e&&(i.rp0=u)}Ai=[Ms.bind(void 0,qe),Ms.bind(void 0,ze),Os.bind(void 0,qe),Os.bind(void 0,ze),Fs.bind(void 0,qe),Fs.bind(void 0,ze),As.bind(void 0,0),As.bind(void 0,1),Ds.bind(void 0,0),Ds.bind(void 0,1),Mu,Ou,Fu,Au,Du,Uu,Ru,Nu,Bu,Gu,Hu,zu,Vu,Xu,qu,Wu,$u,Zu,Yu,_u,void 0,void 0,ju,nn,Ku,Ju,Qu,rl,nl,void 0,void 0,void 0,el,tl,sl,void 0,Us.bind(void 0,0),Us.bind(void 0,1),Rs.bind(void 0,qe),Rs.bind(void 0,ze),Ns.bind(void 0,0),Ns.bind(void 0,1),Bs.bind(void 0,0),Bs.bind(void 0,1),Gs.bind(void 0,0),Gs.bind(void 0,1),il,ol,Hs.bind(void 0,0),Hs.bind(void 0,1),al,ul,zs.bind(void 0,0),zs.bind(void 0,1),ll,fl,hl,cl,pl,dl,Vs.bind(void 0,0),Vs.bind(void 0,1),void 0,Xs.bind(void 0,0),Xs.bind(void 0,1),gl,void 0,vl,void 0,void 0,ml,xl,yl,bl,Sl,kl,El,wl,Pl,Il,Ll,Tl,Cl,sn.bind(void 0,1),Ml,Ol,Fl,Al,Dl,Ul,Rl,Nl,Bl,Gl,kr.bind(void 0,0),kr.bind(void 0,1),kr.bind(void 0,2),kr.bind(void 0,3),void 0,void 0,void 0,void 0,Hl,sn.bind(void 0,2),sn.bind(void 0,3),on.bind(void 0,1),on.bind(void 0,2),on.bind(void 0,3),zl,Vl,void 0,void 0,Xl,void 0,ql,Wl,nn,nn,void 0,void 0,void 0,void 0,void 0,$l,qs.bind(void 0,0),qs.bind(void 0,1),Zl,void 0,Yl,_l,jl,Kl,Jl,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,void 0,Je.bind(void 0,1),Je.bind(void 0,2),Je.bind(void 0,3),Je.bind(void 0,4),Je.bind(void 0,5),Je.bind(void 0,6),Je.bind(void 0,7),Je.bind(void 0,8),Qe.bind(void 0,1),Qe.bind(void 0,2),Qe.bind(void 0,3),Qe.bind(void 0,4),Qe.bind(void 0,5),Qe.bind(void 0,6),Qe.bind(void 0,7),Qe.bind(void 0,8),L.bind(void 0,0,0,0,0,0),L.bind(void 0,0,0,0,0,1),L.bind(void 0,0,0,0,0,2),L.bind(void 0,0,0,0,0,3),L.bind(void 0,0,0,0,1,0),L.bind(void 0,0,0,0,1,1),L.bind(void 0,0,0,0,1,2),L.bind(void 0,0,0,0,1,3),L.bind(void 0,0,0,1,0,0),L.bind(void 0,0,0,1,0,1),L.bind(void 0,0,0,1,0,2),L.bind(void 0,0,0,1,0,3),L.bind(void 0,0,0,1,1,0),L.bind(void 0,0,0,1,1,1),L.bind(void 0,0,0,1,1,2),L.bind(void 0,0,0,1,1,3),L.bind(void 0,0,1,0,0,0),L.bind(void 0,0,1,0,0,1),L.bind(void 0,0,1,0,0,2),L.bind(void 0,0,1,0,0,3),L.bind(void 0,0,1,0,1,0),L.bind(void 0,0,1,0,1,1),L.bind(void 0,0,1,0,1,2),L.bind(void 0,0,1,0,1,3),L.bind(void 0,0,1,1,0,0),L.bind(void 0,0,1,1,0,1),L.bind(void 0,0,1,1,0,2),L.bind(void 0,0,1,1,0,3),L.bind(void 0,0,1,1,1,0),L.bind(void 0,0,1,1,1,1),L.bind(void 0,0,1,1,1,2),L.bind(void 0,0,1,1,1,3),L.bind(void 0,1,0,0,0,0),L.bind(void 0,1,0,0,0,1),L.bind(void 0,1,0,0,0,2),L.bind(void 0,1,0,0,0,3),L.bind(void 0,1,0,0,1,0),L.bind(void 0,1,0,0,1,1),L.bind(void 0,1,0,0,1,2),L.bind(void 0,1,0,0,1,3),L.bind(void 0,1,0,1,0,0),L.bind(void 0,1,0,1,0,1),L.bind(void 0,1,0,1,0,2),L.bind(void 0,1,0,1,0,3),L.bind(void 0,1,0,1,1,0),L.bind(void 0,1,0,1,1,1),L.bind(void 0,1,0,1,1,2),L.bind(void 0,1,0,1,1,3),L.bind(void 0,1,1,0,0,0),L.bind(void 0,1,1,0,0,1),L.bind(void 0,1,1,0,0,2),L.bind(void 0,1,1,0,0,3),L.bind(void 0,1,1,0,1,0),L.bind(void 0,1,1,0,1,1),L.bind(void 0,1,1,0,1,2),L.bind(void 0,1,1,0,1,3),L.bind(void 0,1,1,1,0,0),L.bind(void 0,1,1,1,0,1),L.bind(void 0,1,1,1,0,2),L.bind(void 0,1,1,1,0,3),L.bind(void 0,1,1,1,1,0),L.bind(void 0,1,1,1,1,1),L.bind(void 0,1,1,1,1,2),L.bind(void 0,1,1,1,1,3)];function Pt(t){this.char=t,this.state={},this.activeState=null}function In(t,e,r){this.contextName=r,this.startIndex=t,this.endOffset=e}function Ql(t,e,r){this.contextName=t,this.openRange=null,this.ranges=[],this.checkStart=e,this.checkEnd=r}function Fe(t,e){this.context=t,this.index=e,this.length=t.length,this.current=t[e],this.backtrack=t.slice(0,e),this.lookahead=t.slice(e+1)}function Fr(t){this.eventId=t,this.subscribers=[]}function ef(t){var e=this,r=["start","end","next","newToken","contextStart","contextEnd","insertToken","removeToken","removeRange","replaceToken","replaceRange","composeRUD","updateContextsRanges"];r.forEach(function(s){Object.defineProperty(e.events,s,{value:new Fr(s)})}),t&&r.forEach(function(s){var i=t[s];typeof i=="function"&&e.events[s].subscribe(i)});var n=["insertToken","removeToken","removeRange","replaceToken","replaceRange","composeRUD"];n.forEach(function(s){e.events[s].subscribe(e.updateContextsRanges)})}function ne(t){this.tokens=[],this.registeredContexts={},this.contextCheckers=[],this.events={},this.registeredModifiers=[],ef.call(this,t)}Pt.prototype.setState=function(t,e){return this.state[t]=e,this.activeState={key:t,value:this.state[t]},this.activeState};Pt.prototype.getState=function(t){return this.state[t]||null};ne.prototype.inboundIndex=function(t){return t>=0&&t<this.tokens.length};ne.prototype.composeRUD=function(t){var e=this,r=!0,n=t.map(function(i){return e[i[0]].apply(e,i.slice(1).concat(r))}),s=function(i){return typeof i=="object"&&i.hasOwnProperty("FAIL")};if(n.every(s))return{FAIL:"composeRUD: one or more operations hasn't completed successfully",report:n.filter(s)};this.dispatch("composeRUD",[n.filter(function(i){return!s(i)})])};ne.prototype.replaceRange=function(t,e,r,n){e=e!==null?e:this.tokens.length;var s=r.every(function(o){return o instanceof Pt});if(!isNaN(t)&&this.inboundIndex(t)&&s){var i=this.tokens.splice.apply(this.tokens,[t,e].concat(r));return n||this.dispatch("replaceToken",[t,e,r]),[i,r]}else return{FAIL:"replaceRange: invalid tokens or startIndex."}};ne.prototype.replaceToken=function(t,e,r){if(!isNaN(t)&&this.inboundIndex(t)&&e instanceof Pt){var n=this.tokens.splice(t,1,e);return r||this.dispatch("replaceToken",[t,e]),[n[0],e]}else return{FAIL:"replaceToken: invalid token or index."}};ne.prototype.removeRange=function(t,e,r){e=isNaN(e)?this.tokens.length:e;var n=this.tokens.splice(t,e);return r||this.dispatch("removeRange",[n,t,e]),n};ne.prototype.removeToken=function(t,e){if(!isNaN(t)&&this.inboundIndex(t)){var r=this.tokens.splice(t,1);return e||this.dispatch("removeToken",[r,t]),r}else return{FAIL:"removeToken: invalid token index."}};ne.prototype.insertToken=function(t,e,r){var n=t.every(function(s){return s instanceof Pt});return n?(this.tokens.splice.apply(this.tokens,[e,0].concat(t)),r||this.dispatch("insertToken",[t,e]),t):{FAIL:"insertToken: invalid token(s)."}};ne.prototype.registerModifier=function(t,e,r){this.events.newToken.subscribe(function(n,s){var i=[n,s],o=e===null||e.apply(this,i)===!0,a=[n,s];if(o){var u=r.apply(this,a);n.setState(t,u)}}),this.registeredModifiers.push(t)};Fr.prototype.subscribe=function(t){return typeof t=="function"?this.subscribers.push(t)-1:{FAIL:"invalid '"+this.eventId+"' event handler"}};Fr.prototype.unsubscribe=function(t){this.subscribers.splice(t,1)};Fe.prototype.setCurrentIndex=function(t){this.index=t,this.current=this.context[t],this.backtrack=this.context.slice(0,t),this.lookahead=this.context.slice(t+1)};Fe.prototype.get=function(t){switch(!0){case t===0:return this.current;case(t<0&&Math.abs(t)<=this.backtrack.length):return this.backtrack.slice(t)[0];case(t>0&&t<=this.lookahead.length):return this.lookahead[t-1];default:return null}};ne.prototype.rangeToText=function(t){if(t instanceof In)return this.getRangeTokens(t).map(function(e){return e.char}).join("")};ne.prototype.getText=function(){return this.tokens.map(function(t){return t.char}).join("")};ne.prototype.getContext=function(t){var e=this.registeredContexts[t];return e||null};ne.prototype.on=function(t,e){var r=this.events[t];return r?r.subscribe(e):null};ne.prototype.dispatch=function(t,e){var r=this,n=this.events[t];n instanceof Fr&&n.subscribers.forEach(function(s){s.apply(r,e||[])})};ne.prototype.registerContextChecker=function(t,e,r){if(this.getContext(t))return{FAIL:"context name '"+t+"' is already registered."};if(typeof e!="function")return{FAIL:"missing context start check."};if(typeof r!="function")return{FAIL:"missing context end check."};var n=new Ql(t,e,r);return this.registeredContexts[t]=n,this.contextCheckers.push(n),n};ne.prototype.getRangeTokens=function(t){var e=t.startIndex+t.endOffset;return[].concat(this.tokens.slice(t.startIndex,e))};ne.prototype.getContextRanges=function(t){var e=this.getContext(t);return e?e.ranges:{FAIL:"context checker '"+t+"' is not registered."}};ne.prototype.resetContextsRanges=function(){var t=this.registeredContexts;for(var e in t)if(t.hasOwnProperty(e)){var r=t[e];r.ranges=[]}};ne.prototype.updateContextsRanges=function(){this.resetContextsRanges();for(var t=this.tokens.map(function(n){return n.char}),e=0;e<t.length;e++){var r=new Fe(t,e);this.runContextCheck(r)}this.dispatch("updateContextsRanges",[this.registeredContexts])};ne.prototype.setEndOffset=function(t,e){var r=this.getContext(e).openRange.startIndex,n=new In(r,t,e),s=this.getContext(e).ranges;return n.rangeId=e+"."+s.length,s.push(n),this.getContext(e).openRange=null,n};ne.prototype.runContextCheck=function(t){var e=this,r=t.index;this.contextCheckers.forEach(function(n){var s=n.contextName,i=e.getContext(s).openRange;if(!i&&n.checkStart(t)&&(i=new In(r,null,s),e.getContext(s).openRange=i,e.dispatch("contextStart",[s,r])),i&&n.checkEnd(t)){var o=r-i.startIndex+1,a=e.setEndOffset(o,s);e.dispatch("contextEnd",[s,a])}})};ne.prototype.tokenize=function(t){this.tokens=[],this.resetContextsRanges();var e=Array.from(t);this.dispatch("start");for(var r=0;r<e.length;r++){var n=e[r],s=new Fe(e,r);this.dispatch("next",[s]),this.runContextCheck(s);var i=new Pt(n);this.tokens.push(i),this.dispatch("newToken",[i,s])}return this.dispatch("end",[this.tokens]),this.tokens};function rt(t){return/[\u0600-\u065F\u066A-\u06D2\u06FA-\u06FF]/.test(t)}function Gi(t){return/[\u0630\u0690\u0621\u0631\u0661\u0671\u0622\u0632\u0672\u0692\u06C2\u0623\u0673\u0693\u06C3\u0624\u0694\u06C4\u0625\u0675\u0695\u06C5\u06E5\u0676\u0696\u06C6\u0627\u0677\u0697\u06C7\u0648\u0688\u0698\u06C8\u0689\u0699\u06C9\u068A\u06CA\u066B\u068B\u06CB\u068C\u068D\u06CD\u06FD\u068E\u06EE\u06FE\u062F\u068F\u06CF\u06EF]/.test(t)}function nt(t){return/[\u0600-\u0605\u060C-\u060E\u0610-\u061B\u061E\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED]/.test(t)}function wr(t){return/[A-z]/.test(t)}function tf(t){return/\s/.test(t)}function Ee(t){this.font=t,this.features={}}function pt(t){this.id=t.id,this.tag=t.tag,this.substitution=t.substitution}function Yt(t,e){if(!t)return-1;switch(e.format){case 1:return e.glyphs.indexOf(t);case 2:for(var r=e.ranges,n=0;n<r.length;n++){var s=r[n];if(t>=s.start&&t<=s.end){var i=t-s.start;return s.index+i}}break;default:return-1}return-1}function rf(t,e){var r=Yt(t,e.coverage);return r===-1?null:t+e.deltaGlyphId}function nf(t,e){var r=Yt(t,e.coverage);return r===-1?null:e.substitute[r]}function an(t,e){for(var r=[],n=0;n<t.length;n++){var s=t[n],i=e.current;i=Array.isArray(i)?i[0]:i;var o=Yt(i,s);o!==-1&&r.push(o)}return r.length!==t.length?-1:r}function sf(t,e){var r=e.inputCoverage.length+e.lookaheadCoverage.length+e.backtrackCoverage.length;if(t.context.length<r)return[];var n=an(e.inputCoverage,t);if(n===-1)return[];var s=e.inputCoverage.length-1;if(t.lookahead.length<e.lookaheadCoverage.length)return[];for(var i=t.lookahead.slice(s);i.length&&nt(i[0].char);)i.shift();var o=new Fe(i,0),a=an(e.lookaheadCoverage,o),u=[].concat(t.backtrack);for(u.reverse();u.length&&nt(u[0].char);)u.shift();if(u.length<e.backtrackCoverage.length)return[];var l=new Fe(u,0),f=an(e.backtrackCoverage,l),c=n.length===e.inputCoverage.length&&a.length===e.lookaheadCoverage.length&&f.length===e.backtrackCoverage.length,h=[];if(c)for(var p=0;p<e.lookupRecords.length;p++)for(var d=e.lookupRecords[p],x=d.lookupListIndex,m=this.getLookupByIndex(x),b=0;b<m.subtables.length;b++){var C=m.subtables[b],S=this.getLookupMethod(m,C),M=this.getSubstitutionType(m,C);if(M==="12")for(var I=0;I<n.length;I++){var X=t.get(I),O=S(X);O&&h.push(O)}}return h}function of(t,e){var r=t.current,n=Yt(r,e.coverage);if(n===-1)return null;for(var s,i=e.ligatureSets[n],o=0;o<i.length;o++){s=i[o];for(var a=0;a<s.components.length;a++){var u=t.lookahead[a],l=s.components[a];if(u!==l)break;if(a===s.components.length-1)return s}}return null}function af(t,e){var r=Yt(t,e.coverage);return r===-1?null:e.sequences[r]}Ee.prototype.getDefaultScriptFeaturesIndexes=function(){for(var t=this.font.tables.gsub.scripts,e=0;e<t.length;e++){var r=t[e];if(r.tag==="DFLT")return r.script.defaultLangSys.featureIndexes}return[]};Ee.prototype.getScriptFeaturesIndexes=function(t){var e=this.font.tables;if(!e.gsub)return[];if(!t)return this.getDefaultScriptFeaturesIndexes();for(var r=this.font.tables.gsub.scripts,n=0;n<r.length;n++){var s=r[n];if(s.tag===t&&s.script.defaultLangSys)return s.script.defaultLangSys.featureIndexes;var i=s.langSysRecords;if(i)for(var o=0;o<i.length;o++){var a=i[o];if(a.tag===t){var u=a.langSys;return u.featureIndexes}}}return this.getDefaultScriptFeaturesIndexes()};Ee.prototype.mapTagsToFeatures=function(t,e){for(var r={},n=0;n<t.length;n++){var s=t[n].tag,i=t[n].feature;r[s]=i}this.features[e].tags=r};Ee.prototype.getScriptFeatures=function(t){var e=this.features[t];if(this.features.hasOwnProperty(t))return e;var r=this.getScriptFeaturesIndexes(t);if(!r)return null;var n=this.font.tables.gsub;return e=r.map(function(s){return n.features[s]}),this.features[t]=e,this.mapTagsToFeatures(e,t),e};Ee.prototype.getSubstitutionType=function(t,e){var r=t.lookupType.toString(),n=e.substFormat.toString();return r+n};Ee.prototype.getLookupMethod=function(t,e){var r=this,n=this.getSubstitutionType(t,e);switch(n){case"11":return function(s){return rf.apply(r,[s,e])};case"12":return function(s){return nf.apply(r,[s,e])};case"63":return function(s){return sf.apply(r,[s,e])};case"41":return function(s){return of.apply(r,[s,e])};case"21":return function(s){return af.apply(r,[s,e])};default:throw new Error("lookupType: "+t.lookupType+" - substFormat: "+e.substFormat+" is not yet supported")}};Ee.prototype.lookupFeature=function(t){var e=t.contextParams,r=e.index,n=this.getFeature({tag:t.tag,script:t.script});if(!n)return new Error("font '"+this.font.names.fullName.en+"' doesn't support feature '"+t.tag+"' for script '"+t.script+"'.");for(var s=this.getFeatureLookups(n),i=[].concat(e.context),o=0;o<s.length;o++)for(var a=s[o],u=this.getLookupSubtables(a),l=0;l<u.length;l++){var f=u[l],c=this.getSubstitutionType(a,f),h=this.getLookupMethod(a,f),p=void 0;switch(c){case"11":p=h(e.current),p&&i.splice(r,1,new pt({id:11,tag:t.tag,substitution:p}));break;case"12":p=h(e.current),p&&i.splice(r,1,new pt({id:12,tag:t.tag,substitution:p}));break;case"63":p=h(e),Array.isArray(p)&&p.length&&i.splice(r,1,new pt({id:63,tag:t.tag,substitution:p}));break;case"41":p=h(e),p&&i.splice(r,1,new pt({id:41,tag:t.tag,substitution:p}));break;case"21":p=h(e.current),p&&i.splice(r,1,new pt({id:21,tag:t.tag,substitution:p}));break}e=new Fe(i,r),!(Array.isArray(p)&&!p.length)&&(p=null)}return i.length?i:null};Ee.prototype.supports=function(t){if(!t.script)return!1;this.getScriptFeatures(t.script);var e=this.features.hasOwnProperty(t.script);if(!t.tag)return e;var r=this.features[t.script].some(function(n){return n.tag===t.tag});return e&&r};Ee.prototype.getLookupSubtables=function(t){return t.subtables||null};Ee.prototype.getLookupByIndex=function(t){var e=this.font.tables.gsub.lookups;return e[t]||null};Ee.prototype.getFeatureLookups=function(t){return t.lookupListIndexes.map(this.getLookupByIndex.bind(this))};Ee.prototype.getFeature=function(e){if(!this.font)return{FAIL:"No font was found"};this.features.hasOwnProperty(e.script)||this.getScriptFeatures(e.script);var r=this.features[e.script];return r?r.tags[e.tag]?this.features[e.script].tags[e.tag]:null:{FAIL:"No feature for script "+e.script}};function uf(t){var e=t.current,r=t.get(-1);return r===null&&rt(e)||!rt(r)&&rt(e)}function lf(t){var e=t.get(1);return e===null||!rt(e)}var ff={startCheck:uf,endCheck:lf};function hf(t){var e=t.current,r=t.get(-1);return(rt(e)||nt(e))&&!rt(r)}function cf(t){var e=t.get(1);switch(!0){case e===null:return!0;case(!rt(e)&&!nt(e)):var r=tf(e);if(!r)return!0;if(r){var n=!1;if(n=t.lookahead.some(function(s){return rt(s)||nt(s)}),!n)return!0}break;default:return!1}}var pf={startCheck:hf,endCheck:cf};function df(t,e,r){e[r].setState(t.tag,t.substitution)}function gf(t,e,r){e[r].setState(t.tag,t.substitution)}function vf(t,e,r){t.substitution.forEach(function(n,s){var i=e[r+s];i.setState(t.tag,n)})}function mf(t,e,r){var n=e[r];n.setState(t.tag,t.substitution.ligGlyph);for(var s=t.substitution.components.length,i=0;i<s;i++)n=e[r+i+1],n.setState("deleted",!0)}var Ws={11:df,12:gf,63:vf,41:mf};function Ln(t,e,r){t instanceof pt&&Ws[t.id]&&Ws[t.id](t,e,r)}function xf(t){for(var e=[].concat(t.backtrack),r=e.length-1;r>=0;r--){var n=e[r],s=Gi(n),i=nt(n);if(!s&&!i)return!0;if(s)return!1}return!1}function yf(t){if(Gi(t.current))return!1;for(var e=0;e<t.lookahead.length;e++){var r=t.lookahead[e],n=nt(r);if(!n)return!0}return!1}function bf(t){var e=this,r="arab",n=this.featuresTags[r],s=this.tokenizer.getRangeTokens(t);if(s.length!==1){var i=new Fe(s.map(function(a){return a.getState("glyphIndex")}),0),o=new Fe(s.map(function(a){return a.char}),0);s.forEach(function(a,u){if(!nt(a.char)){i.setCurrentIndex(u),o.setCurrentIndex(u);var l=0;xf(o)&&(l|=1),yf(o)&&(l|=2);var f;switch(l){case 1:f="fina";break;case 2:f="init";break;case 3:f="medi";break}if(n.indexOf(f)!==-1){var c=e.query.lookupFeature({tag:f,script:r,contextParams:i});if(c instanceof Error)return console.info(c.message);c.forEach(function(h,p){h instanceof pt&&(Ln(h,s,p),i.context[p]=h.substitution)})}}})}}function $s(t,e){var r=t.map(function(n){return n.activeState.value});return new Fe(r,e||0)}function Sf(t){var e=this,r="arab",n=this.tokenizer.getRangeTokens(t),s=$s(n);s.context.forEach(function(i,o){s.setCurrentIndex(o);var a=e.query.lookupFeature({tag:"rlig",script:r,contextParams:s});a.length&&(a.forEach(function(u){return Ln(u,n,o)}),s=$s(n))})}function kf(t){var e=t.current,r=t.get(-1);return r===null&&wr(e)||!wr(r)&&wr(e)}function Ef(t){var e=t.get(1);return e===null||!wr(e)}var wf={startCheck:kf,endCheck:Ef};function Zs(t,e){var r=t.map(function(n){return n.activeState.value});return new Fe(r,e||0)}function Pf(t){var e=this,r="latn",n=this.tokenizer.getRangeTokens(t),s=Zs(n);s.context.forEach(function(i,o){s.setCurrentIndex(o);var a=e.query.lookupFeature({tag:"liga",script:r,contextParams:s});a.length&&(a.forEach(function(u){return Ln(u,n,o)}),s=Zs(n))})}function Ue(t){this.baseDir=t||"ltr",this.tokenizer=new ne,this.featuresTags={}}Ue.prototype.setText=function(t){this.text=t};Ue.prototype.contextChecks={latinWordCheck:wf,arabicWordCheck:ff,arabicSentenceCheck:pf};function un(t){var e=this.contextChecks[t+"Check"];return this.tokenizer.registerContextChecker(t,e.startCheck,e.endCheck)}function If(){return un.call(this,"latinWord"),un.call(this,"arabicWord"),un.call(this,"arabicSentence"),this.tokenizer.tokenize(this.text)}function Lf(){var t=this,e=this.tokenizer.getContextRanges("arabicSentence");e.forEach(function(r){var n=t.tokenizer.getRangeTokens(r);t.tokenizer.replaceRange(r.startIndex,r.endOffset,n.reverse())})}Ue.prototype.registerFeatures=function(t,e){var r=this,n=e.filter(function(s){return r.query.supports({script:t,tag:s})});this.featuresTags.hasOwnProperty(t)?this.featuresTags[t]=this.featuresTags[t].concat(n):this.featuresTags[t]=n};Ue.prototype.applyFeatures=function(t,e){if(!t)throw new Error("No valid font was provided to apply features");this.query||(this.query=new Ee(t));for(var r=0;r<e.length;r++){var n=e[r];this.query.supports({script:n.script})&&this.registerFeatures(n.script,n.tags)}};Ue.prototype.registerModifier=function(t,e,r){this.tokenizer.registerModifier(t,e,r)};function Tn(){if(this.tokenizer.registeredModifiers.indexOf("glyphIndex")===-1)throw new Error("glyphIndex modifier is required to apply arabic presentation features.")}function Tf(){var t=this,e="arab";if(this.featuresTags.hasOwnProperty(e)){Tn.call(this);var r=this.tokenizer.getContextRanges("arabicWord");r.forEach(function(n){bf.call(t,n)})}}function Cf(){var t=this,e="arab";if(this.featuresTags.hasOwnProperty(e)){var r=this.featuresTags[e];if(r.indexOf("rlig")!==-1){Tn.call(this);var n=this.tokenizer.getContextRanges("arabicWord");n.forEach(function(s){Sf.call(t,s)})}}}function Mf(){var t=this,e="latn";if(this.featuresTags.hasOwnProperty(e)){var r=this.featuresTags[e];if(r.indexOf("liga")!==-1){Tn.call(this);var n=this.tokenizer.getContextRanges("latinWord");n.forEach(function(s){Pf.call(t,s)})}}}Ue.prototype.checkContextReady=function(t){return!!this.tokenizer.getContext(t)};Ue.prototype.applyFeaturesToContexts=function(){this.checkContextReady("arabicWord")&&(Tf.call(this),Cf.call(this)),this.checkContextReady("latinWord")&&Mf.call(this),this.checkContextReady("arabicSentence")&&Lf.call(this)};Ue.prototype.processText=function(t){(!this.text||this.text!==t)&&(this.setText(t),If.call(this),this.applyFeaturesToContexts())};Ue.prototype.getBidiText=function(t){return this.processText(t),this.tokenizer.getText()};Ue.prototype.getTextGlyphs=function(t){this.processText(t);for(var e=[],r=0;r<this.tokenizer.tokens.length;r++){var n=this.tokenizer.tokens[r];if(!n.state.deleted){var s=n.activeState.value;e.push(Array.isArray(s)?s[0]:s)}}return e};function J(t){t=t||{},t.tables=t.tables||{},t.empty||(Bt(t.familyName,"When creating a new Font object, familyName is required."),Bt(t.styleName,"When creating a new Font object, styleName is required."),Bt(t.unitsPerEm,"When creating a new Font object, unitsPerEm is required."),Bt(t.ascender,"When creating a new Font object, ascender is required."),Bt(t.descender<=0,"When creating a new Font object, negative descender value is required."),this.names={fontFamily:{en:t.familyName||" "},fontSubfamily:{en:t.styleName||" "},fullName:{en:t.fullName||t.familyName+" "+t.styleName},postScriptName:{en:t.postScriptName||(t.familyName+t.styleName).replace(/\s/g,"")},designer:{en:t.designer||" "},designerURL:{en:t.designerURL||" "},manufacturer:{en:t.manufacturer||" "},manufacturerURL:{en:t.manufacturerURL||" "},license:{en:t.license||" "},licenseURL:{en:t.licenseURL||" "},version:{en:t.version||"Version 0.1"},description:{en:t.description||" "},copyright:{en:t.copyright||" "},trademark:{en:t.trademark||" "}},this.unitsPerEm=t.unitsPerEm||1e3,this.ascender=t.ascender,this.descender=t.descender,this.createdTimestamp=t.createdTimestamp,this.tables=Object.assign(t.tables,{os2:Object.assign({usWeightClass:t.weightClass||this.usWeightClasses.MEDIUM,usWidthClass:t.widthClass||this.usWidthClasses.MEDIUM,fsSelection:t.fsSelection||this.fsSelectionValues.REGULAR},t.tables.os2)})),this.supported=!0,this.glyphs=new Ve.GlyphSet(this,t.glyphs||[]),this.encoding=new si(this),this.position=new Wt(this),this.substitution=new ke(this),this.tables=this.tables||{},this._push=null,this._hmtxTableData={},Object.defineProperty(this,"hinting",{get:function(){if(this._hinting)return this._hinting;if(this.outlinesFormat==="truetype")return this._hinting=new Ui(this)}})}J.prototype.hasChar=function(t){return this.encoding.charToGlyphIndex(t)!==null};J.prototype.charToGlyphIndex=function(t){return this.encoding.charToGlyphIndex(t)};J.prototype.charToGlyph=function(t){var e=this.charToGlyphIndex(t),r=this.glyphs.get(e);return r||(r=this.glyphs.get(0)),r};J.prototype.updateFeatures=function(t){return this.defaultRenderOptions.features.map(function(e){return e.script==="latn"?{script:"latn",tags:e.tags.filter(function(r){return t[r]})}:e})};J.prototype.stringToGlyphs=function(t,e){var r=this,n=new Ue,s=function(c){return r.charToGlyphIndex(c.char)};n.registerModifier("glyphIndex",null,s);var i=e?this.updateFeatures(e.features):this.defaultRenderOptions.features;n.applyFeatures(this,i);for(var o=n.getTextGlyphs(t),a=o.length,u=new Array(a),l=this.glyphs.get(0),f=0;f<a;f+=1)u[f]=this.glyphs.get(o[f])||l;return u};J.prototype.nameToGlyphIndex=function(t){return this.glyphNames.nameToGlyphIndex(t)};J.prototype.nameToGlyph=function(t){var e=this.nameToGlyphIndex(t),r=this.glyphs.get(e);return r||(r=this.glyphs.get(0)),r};J.prototype.glyphIndexToName=function(t){return this.glyphNames.glyphIndexToName?this.glyphNames.glyphIndexToName(t):""};J.prototype.getKerningValue=function(t,e){t=t.index||t,e=e.index||e;var r=this.position.defaultKerningTables;return r?this.position.getKerningValue(r,t,e):this.kerningPairs[t+","+e]||0};J.prototype.defaultRenderOptions={kerning:!0,features:[{script:"arab",tags:["init","medi","fina","rlig"]},{script:"latn",tags:["liga","rlig"]}]};J.prototype.forEachGlyph=function(t,e,r,n,s,i){e=e!==void 0?e:0,r=r!==void 0?r:0,n=n!==void 0?n:72,s=Object.assign({},this.defaultRenderOptions,s);var o=1/this.unitsPerEm*n,a=this.stringToGlyphs(t,s),u;if(s.kerning){var l=s.script||this.position.getDefaultScriptName();u=this.position.getKerningTables(l,s.language)}for(var f=0;f<a.length;f+=1){var c=a[f];if(i.call(this,c,e,r,n,s),c.advanceWidth&&(e+=c.advanceWidth*o),s.kerning&&f<a.length-1){var h=u?this.position.getKerningValue(u,c.index,a[f+1].index):this.getKerningValue(c,a[f+1]);e+=h*o}s.letterSpacing?e+=s.letterSpacing*n:s.tracking&&(e+=s.tracking/1e3*n)}return e};J.prototype.getPath=function(t,e,r,n,s){var i=new ue;return this.forEachGlyph(t,e,r,n,s,function(o,a,u,l){var f=o.getPath(a,u,l,s,this);i.extend(f)}),i};J.prototype.getPaths=function(t,e,r,n,s){var i=[];return this.forEachGlyph(t,e,r,n,s,function(o,a,u,l){var f=o.getPath(a,u,l,s,this);i.push(f)}),i};J.prototype.getAdvanceWidth=function(t,e,r){return this.forEachGlyph(t,0,0,e,r,function(){})};J.prototype.draw=function(t,e,r,n,s,i){this.getPath(e,r,n,s,i).draw(t)};J.prototype.drawPoints=function(t,e,r,n,s,i){this.forEachGlyph(e,r,n,s,i,function(o,a,u,l){o.drawPoints(t,a,u,l)})};J.prototype.drawMetrics=function(t,e,r,n,s,i){this.forEachGlyph(e,r,n,s,i,function(o,a,u,l){o.drawMetrics(t,a,u,l)})};J.prototype.getEnglishName=function(t){var e=this.names[t];if(e)return e.en};J.prototype.validate=function(){var t=this;function e(n,s){}function r(n){var s=t.getEnglishName(n);s&&s.trim().length>0}r("fontFamily"),r("weightName"),r("manufacturer"),r("copyright"),r("version"),this.unitsPerEm>0};J.prototype.toTables=function(){return vu.fontToTable(this)};J.prototype.toBuffer=function(){return console.warn("Font.toBuffer is deprecated. Use Font.toArrayBuffer instead."),this.toArrayBuffer()};J.prototype.toArrayBuffer=function(){for(var t=this.toTables(),e=t.encode(),r=new ArrayBuffer(e.length),n=new Uint8Array(r),s=0;s<e.length;s++)n[s]=e[s];return r};J.prototype.download=function(t){var e=this.getEnglishName("fontFamily"),r=this.getEnglishName("fontSubfamily");t=t||e.replace(/\s/g,"")+"-"+r+".otf";var n=this.toArrayBuffer();if(xu())if(window.URL=window.URL||window.webkitURL,window.URL){var s=new DataView(n),i=new Blob([s],{type:"font/opentype"}),o=document.createElement("a");o.href=window.URL.createObjectURL(i),o.download=t;var a=document.createEvent("MouseEvents");a.initEvent("click",!0,!1),o.dispatchEvent(a)}else console.warn("Font file could not be downloaded. Try using a different browser.");else{var u=ls(),l=yu(n);u.writeFileSync(t,l)}};J.prototype.fsSelectionValues={ITALIC:1,UNDERSCORE:2,NEGATIVE:4,OUTLINED:8,STRIKEOUT:16,BOLD:32,REGULAR:64,USER_TYPO_METRICS:128,WWS:256,OBLIQUE:512};J.prototype.usWidthClasses={ULTRA_CONDENSED:1,EXTRA_CONDENSED:2,CONDENSED:3,SEMI_CONDENSED:4,MEDIUM:5,SEMI_EXPANDED:6,EXPANDED:7,EXTRA_EXPANDED:8,ULTRA_EXPANDED:9};J.prototype.usWeightClasses={THIN:100,EXTRA_LIGHT:200,LIGHT:300,NORMAL:400,MEDIUM:500,SEMI_BOLD:600,BOLD:700,EXTRA_BOLD:800,BLACK:900};function Hi(t,e){var r=JSON.stringify(t),n=256;for(var s in e){var i=parseInt(s);if(!(!i||i<256)){if(JSON.stringify(e[s])===r)return i;n<=i&&(n=i+1)}}return e[n]=t,n}function Of(t,e,r){var n=Hi(e.name,r);return[{name:"tag_"+t,type:"TAG",value:e.tag},{name:"minValue_"+t,type:"FIXED",value:e.minValue<<16},{name:"defaultValue_"+t,type:"FIXED",value:e.defaultValue<<16},{name:"maxValue_"+t,type:"FIXED",value:e.maxValue<<16},{name:"flags_"+t,type:"USHORT",value:0},{name:"nameID_"+t,type:"USHORT",value:n}]}function Ff(t,e,r){var n={},s=new T.Parser(t,e);return n.tag=s.parseTag(),n.minValue=s.parseFixed(),n.defaultValue=s.parseFixed(),n.maxValue=s.parseFixed(),s.skip("uShort",1),n.name=r[s.parseUShort()]||{},n}function Af(t,e,r,n){for(var s=Hi(e.name,n),i=[{name:"nameID_"+t,type:"USHORT",value:s},{name:"flags_"+t,type:"USHORT",value:0}],o=0;o<r.length;++o){var a=r[o].tag;i.push({name:"axis_"+t+" "+a,type:"FIXED",value:e.coordinates[a]<<16})}return i}function Df(t,e,r,n){var s={},i=new T.Parser(t,e);s.name=n[i.parseUShort()]||{},i.skip("uShort",1),s.coordinates={};for(var o=0;o<r.length;++o)s.coordinates[r[o].tag]=i.parseFixed();return s}function Uf(t,e){var r=new w.Table("fvar",[{name:"version",type:"ULONG",value:65536},{name:"offsetToData",type:"USHORT",value:0},{name:"countSizePairs",type:"USHORT",value:2},{name:"axisCount",type:"USHORT",value:t.axes.length},{name:"axisSize",type:"USHORT",value:20},{name:"instanceCount",type:"USHORT",value:t.instances.length},{name:"instanceSize",type:"USHORT",value:4+t.axes.length*4}]);r.offsetToData=r.sizeOf();for(var n=0;n<t.axes.length;n++)r.fields=r.fields.concat(Of(n,t.axes[n],e));for(var s=0;s<t.instances.length;s++)r.fields=r.fields.concat(Af(s,t.instances[s],t.axes,e));return r}function Rf(t,e,r){var n=new T.Parser(t,e),s=n.parseULong();D.argument(s===65536,"Unsupported fvar table version.");var i=n.parseOffset16();n.skip("uShort",1);for(var o=n.parseUShort(),a=n.parseUShort(),u=n.parseUShort(),l=n.parseUShort(),f=[],c=0;c<o;c++)f.push(Ff(t,e+i+c*a,r));for(var h=[],p=e+i+o*a,d=0;d<u;d++)h.push(Df(t,p+d*l,f,r));return{axes:f,instances:h}}var Nf={make:Uf,parse:Rf},Bf=function(){return{coverage:this.parsePointer(v.coverage),attachPoints:this.parseList(v.pointer(v.uShortList))}},Gf=function(){var t=this.parseUShort();if(D.argument(t===1||t===2||t===3,"Unsupported CaretValue table version."),t===1)return{coordinate:this.parseShort()};if(t===2)return{pointindex:this.parseShort()};if(t===3)return{coordinate:this.parseShort()}},Hf=function(){return this.parseList(v.pointer(Gf))},zf=function(){return{coverage:this.parsePointer(v.coverage),ligGlyphs:this.parseList(v.pointer(Hf))}},Vf=function(){return this.parseUShort(),this.parseList(v.pointer(v.coverage))};function Xf(t,e){e=e||0;var r=new v(t,e),n=r.parseVersion(1);D.argument(n===1||n===1.2||n===1.3,"Unsupported GDEF table version.");var s={version:n,classDef:r.parsePointer(v.classDef),attachList:r.parsePointer(Bf),ligCaretList:r.parsePointer(zf),markAttachClassDef:r.parsePointer(v.classDef)};return n>=1.2&&(s.markGlyphSets=r.parsePointer(Vf)),s}var qf={parse:Xf},Ae=new Array(10);Ae[1]=function(){var e=this.offset+this.relativeOffset,r=this.parseUShort();if(r===1)return{posFormat:1,coverage:this.parsePointer(v.coverage),value:this.parseValueRecord()};if(r===2)return{posFormat:2,coverage:this.parsePointer(v.coverage),values:this.parseValueRecordList()};D.assert(!1,"0x"+e.toString(16)+": GPOS lookup type 1 format must be 1 or 2.")};Ae[2]=function(){var e=this.offset+this.relativeOffset,r=this.parseUShort();D.assert(r===1||r===2,"0x"+e.toString(16)+": GPOS lookup type 2 format must be 1 or 2.");var n=this.parsePointer(v.coverage),s=this.parseUShort(),i=this.parseUShort();if(r===1)return{posFormat:r,coverage:n,valueFormat1:s,valueFormat2:i,pairSets:this.parseList(v.pointer(v.list(function(){return{secondGlyph:this.parseUShort(),value1:this.parseValueRecord(s),value2:this.parseValueRecord(i)}})))};if(r===2){var o=this.parsePointer(v.classDef),a=this.parsePointer(v.classDef),u=this.parseUShort(),l=this.parseUShort();return{posFormat:r,coverage:n,valueFormat1:s,valueFormat2:i,classDef1:o,classDef2:a,class1Count:u,class2Count:l,classRecords:this.parseList(u,v.list(l,function(){return{value1:this.parseValueRecord(s),value2:this.parseValueRecord(i)}}))}}};Ae[3]=function(){return{error:"GPOS Lookup 3 not supported"}};Ae[4]=function(){return{error:"GPOS Lookup 4 not supported"}};Ae[5]=function(){return{error:"GPOS Lookup 5 not supported"}};Ae[6]=function(){return{error:"GPOS Lookup 6 not supported"}};Ae[7]=function(){return{error:"GPOS Lookup 7 not supported"}};Ae[8]=function(){return{error:"GPOS Lookup 8 not supported"}};Ae[9]=function(){return{error:"GPOS Lookup 9 not supported"}};function Wf(t,e){e=e||0;var r=new v(t,e),n=r.parseVersion(1);return D.argument(n===1||n===1.1,"Unsupported GPOS table version "+n),n===1?{version:n,scripts:r.parseScriptList(),features:r.parseFeatureList(),lookups:r.parseLookupList(Ae)}:{version:n,scripts:r.parseScriptList(),features:r.parseFeatureList(),lookups:r.parseLookupList(Ae),variations:r.parseFeatureVariationsList()}}var $f=new Array(10);function Zf(t){return new w.Table("GPOS",[{name:"version",type:"ULONG",value:65536},{name:"scripts",type:"TABLE",value:new w.ScriptList(t.scripts)},{name:"features",type:"TABLE",value:new w.FeatureList(t.features)},{name:"lookups",type:"TABLE",value:new w.LookupList(t.lookups,$f)}])}var Yf={parse:Wf,make:Zf};function _f(t){var e={};t.skip("uShort");var r=t.parseUShort();D.argument(r===0,"Unsupported kern sub-table version."),t.skip("uShort",2);var n=t.parseUShort();t.skip("uShort",3);for(var s=0;s<n;s+=1){var i=t.parseUShort(),o=t.parseUShort(),a=t.parseShort();e[i+","+o]=a}return e}function jf(t){var e={};t.skip("uShort");var r=t.parseULong();r>1&&console.warn("Only the first kern subtable is supported."),t.skip("uLong");var n=t.parseUShort(),s=n&255;if(t.skip("uShort"),s===0){var i=t.parseUShort();t.skip("uShort",3);for(var o=0;o<i;o+=1){var a=t.parseUShort(),u=t.parseUShort(),l=t.parseShort();e[a+","+u]=l}}return e}function Kf(t,e){var r=new T.Parser(t,e),n=r.parseUShort();if(n===0)return _f(r);if(n===1)return jf(r);throw new Error("Unsupported kern table version ("+n+").")}var Jf={parse:Kf};function Qf(t,e,r,n){for(var s=new T.Parser(t,e),i=n?s.parseUShort:s.parseULong,o=[],a=0;a<r+1;a+=1){var u=i.call(s);n&&(u*=2),o.push(u)}return o}var eh={parse:Qf};function Ys(t,e){for(var r=[],n=12,s=0;s<e;s+=1){var i=T.getTag(t,n),o=T.getULong(t,n+4),a=T.getULong(t,n+8),u=T.getULong(t,n+12);r.push({tag:i,checksum:o,offset:a,length:u,compression:!1}),n+=16}return r}function th(t,e){for(var r=[],n=44,s=0;s<e;s+=1){var i=T.getTag(t,n),o=T.getULong(t,n+4),a=T.getULong(t,n+8),u=T.getULong(t,n+12),l=void 0;a<u?l="WOFF":l=!1,r.push({tag:i,offset:o,compression:l,compressedLength:a,length:u}),n+=20}return r}function oe(t,e){if(e.compression==="WOFF"){var r=new Uint8Array(t.buffer,e.offset+2,e.compressedLength-2),n=new Uint8Array(e.length);if(Zo(r,n),n.byteLength!==e.length)throw new Error("Decompression error: "+e.tag+" decompressed length doesn't match recorded length");var s=new DataView(n.buffer,0);return{data:s,offset:0}}else return{data:t,offset:e.offset}}function zi(t,e){e=e??{};var r,n,s=new J({empty:!0}),i=new DataView(t,0),o,a=[],u=T.getTag(i,0);if(u==="\0\0\0"||u==="true"||u==="typ1")s.outlinesFormat="truetype",o=T.getUShort(i,4),a=Ys(i,o);else if(u==="OTTO")s.outlinesFormat="cff",o=T.getUShort(i,4),a=Ys(i,o);else if(u==="wOFF"){var l=T.getTag(i,4);if(l==="\0\0\0")s.outlinesFormat="truetype";else if(l==="OTTO")s.outlinesFormat="cff";else throw new Error("Unsupported OpenType flavor "+u);o=T.getUShort(i,12),a=th(i,o)}else throw new Error("Unsupported OpenType signature "+u);for(var f,c,h,p,d,x,m,b,C,S,M,I,X=0;X<o;X+=1){var O=a[X],P=void 0;switch(O.tag){case"cmap":P=oe(i,O),s.tables.cmap=ni.parse(P.data,P.offset),s.encoding=new ii(s.tables.cmap);break;case"cvt ":P=oe(i,O),I=new T.Parser(P.data,P.offset),s.tables.cvt=I.parseShortList(O.length/2);break;case"fvar":c=O;break;case"fpgm":P=oe(i,O),I=new T.Parser(P.data,P.offset),s.tables.fpgm=I.parseByteList(O.length);break;case"head":P=oe(i,O),s.tables.head=gi.parse(P.data,P.offset),s.unitsPerEm=s.tables.head.unitsPerEm,r=s.tables.head.indexToLocFormat;break;case"hhea":P=oe(i,O),s.tables.hhea=vi.parse(P.data,P.offset),s.ascender=s.tables.hhea.ascender,s.descender=s.tables.hhea.descender,s.numberOfHMetrics=s.tables.hhea.numberOfHMetrics;break;case"hmtx":m=O;break;case"ltag":P=oe(i,O),n=xi.parse(P.data,P.offset);break;case"maxp":P=oe(i,O),s.tables.maxp=yi.parse(P.data,P.offset),s.numGlyphs=s.tables.maxp.numGlyphs;break;case"name":S=O;break;case"OS/2":P=oe(i,O),s.tables.os2=vn.parse(P.data,P.offset);break;case"post":P=oe(i,O),s.tables.post=Pi.parse(P.data,P.offset),s.glyphNames=new kn(s.tables.post);break;case"prep":P=oe(i,O),I=new T.Parser(P.data,P.offset),s.tables.prep=I.parseByteList(O.length);break;case"glyf":h=O;break;case"loca":C=O;break;case"CFF ":f=O;break;case"kern":b=O;break;case"GDEF":p=O;break;case"GPOS":d=O;break;case"GSUB":x=O;break;case"meta":M=O;break}}var W=oe(i,S);if(s.tables.name=wi.parse(W.data,W.offset,n),s.names=s.tables.name,h&&C){var j=r===0,se=oe(i,C),le=eh.parse(se.data,se.offset,s.numGlyphs,j),pe=oe(i,h);s.glyphs=Fi.parse(pe.data,pe.offset,le,s,e)}else if(f){var Q=oe(i,f);di.parse(Q.data,Q.offset,s,e)}else throw new Error("Font doesn't contain TrueType or CFF outlines.");var k=oe(i,m);if(mi.parse(s,k.data,k.offset,s.numberOfHMetrics,s.numGlyphs,s.glyphs,e),da(s,e),b){var F=oe(i,b);s.kerningPairs=Jf.parse(F.data,F.offset)}else s.kerningPairs={};if(p){var A=oe(i,p);s.tables.gdef=qf.parse(A.data,A.offset)}if(d){var R=oe(i,d);s.tables.gpos=Yf.parse(R.data,R.offset),s.position.init()}if(x){var N=oe(i,x);s.tables.gsub=Ii.parse(N.data,N.offset)}if(c){var G=oe(i,c);s.tables.fvar=Nf.parse(G.data,G.offset,s.names)}if(M){var B=oe(i,M);s.tables.meta=Li.parse(B.data,B.offset),s.metas=s.tables.meta}return s}var Ar=class{constructor(e,r){this.sources=e;this.fallback=r;this.parsed=new Map;this.missing=new Set}names(){return Object.keys(this.sources)}get(e){let r=e||this.fallback||Object.keys(this.sources)[0];if(!r)throw this.missing.add(""),new Error("text() needs a font. Pass fonts to render(), or --font on the command line.");let n=this.parsed.get(r);if(n)return n;let s=this.sources[r];if(!s)throw this.missing.add(r),new Error(`Font "${r}" is not available.${this.names().length?` Available fonts: ${this.names().join(", ")}`:""}`);let i=s instanceof Uint8Array?s.buffer.slice(s.byteOffset,s.byteOffset+s.byteLength):s,o=zi(i);return this.parsed.set(r,o),o}};function Vi(t,e,r){let n={kerning:!0};if(r.spacing===1)return{cmds:t.getPath(e,0,0,r.size,n).commands,advance:t.getAdvanceWidth(e,r.size,n)};let s=[],i=0,o=[...e];return o.forEach((a,u)=>{s.push(...t.getPath(a,i,0,r.size,n).commands),i+=t.getAdvanceWidth(a,r.size,n)*(u<o.length-1?r.spacing:1)}),{cmds:s,advance:i}}function Cn(t,e,r){if(!e)return[];let n=t.get(r.font),{cmds:s,advance:i}=Vi(n,e,r),o=s.map(h=>h.type==="Z"?h:h.type==="C"?{...h,y1:-h.y1,y2:-h.y2,y:-h.y}:h.type==="Q"?{...h,y1:-h.y1,y:-h.y}:{...h,y:-h.y}),a=mr(o,Math.max(.005,r.size/2e3)),u=fe([...a.closed,...a.open.filter(h=>h.length>=3)]),l=pr(u);if(!l)return[];let f=r.halign==="center"?-i/2:r.halign==="right"?-i:0,c=r.valign==="top"?-l[3]:r.valign==="center"?-(l[1]+l[3])/2:r.valign==="bottom"?-l[1]:0;return u.map(h=>h.map(([p,d])=>[p+f,d+c]))}function Xi(t,e,r){let n=t.get(r.font),{advance:s}=Vi(n,e,r),i=Cn(t,e,{...r,halign:"left",valign:"baseline"}),o=pr(i)??[0,0,0,0];return{advance:s,bounds:[[o[0],o[1]],[o[2],o[3]]],ascent:n.ascender/n.unitsPerEm*r.size,descent:n.descender/n.unitsPerEm*r.size}}var Mn=[{name:"engrave",mode:"fill",color:"#000000"},{name:"score",mode:"line",color:"#0000ff"},{name:"cut",mode:"cut",color:"#ff0000"},{name:"guide",mode:"guide",color:"#00a0ff"}],ce=class{constructor(e,r){this.parent=e;this.caller=r;this.vars=new Map;this.fns=new Map;this.mods=new Map}get(e){let r=this,n=e.startsWith("$");for(;r;){if(r.vars.has(e))return{found:!0,value:r.vars.get(e)};r=n?r.caller??r.parent:r.parent}return{found:!1}}fn(e){for(let r=this;r;r=r.parent){let n=r.fns.get(e);if(n)return n}}mod(e){for(let r=this;r;r=r.parent){let n=r.mods.get(e);if(n)return n}}childCtx(){for(let e=this;e;e=e.parent)if(e.children)return e.children}},rh=os,Dr=class{constructor(e={}){this.opts=e;this.steps=0;this.depth=0;this.echoes=[];this.warnings=[];this.layers=new Map(Mn.map(e=>[e.name,e]));this.loaded=new Map;this.maxSteps=e.maxSteps??5e6,this.builtins=this.makeBuiltins()}run(e){let r=new ce,n={$fn:0,$fa:2,$fs:.2,$thickness:3,$kerf:0,$material:"material",$sheet:[600,400],$gap:3,$layout:"pack",PI:Math.PI};for(let[o,a]of Object.entries(n))r.vars.set(o,a);let s=new ce(r);return{shape:this.block(e.body,s,!0),globals:s,layers:this.layers,echoes:this.echoes,warnings:this.warnings}}tick(e){if(++this.steps>this.maxSteps)throw new z(`Stopped after ${this.maxSteps} steps. Is there an endless loop?`,e)}load(e,r){let n=this.loaded.get(e);if(n)return n;let s=rh[e]??this.opts.resolve?.(e);if(s===void 0)throw new z(`Library <${e}> not found`,r);this.loaded.set(e,{body:[]});let{program:i}=Ke(s);return this.loaded.set(e,i),i}hoist(e,r){for(let n of e)if(n.kind==="module")r.mods.set(n.name,{params:n.params,body:n.body,env:r});else if(n.kind==="function")r.fns.set(n.name,{params:n.params,body:n.body,env:r});else if(n.kind==="use"&&!n.include){let s=this.load(n.path,n.pos),i=new ce(r);this.hoist(s.body,i);for(let o of s.body)o.kind==="assign"&&this.assign(o.name,this.expr(o.value,i),i);for(let[o,a]of i.mods)r.mods.set(o,a);for(let[o,a]of i.fns)r.fns.set(o,a)}}assign(e,r,n){n.vars.set(e,r)}block(e,r,n=!1){this.hoist(e,r);let s=[];for(let i of e){let o=this.stmt(i,r,n);o&&!_n(o)&&s.push(o)}return s.length===1?s[0]:Ut(s)}stmt(e,r,n=!1){switch(this.tick(e.pos),e.kind){case"assign":{let s=this.opts.overrides,i=n&&s&&Object.prototype.hasOwnProperty.call(s,e.name)?s[e.name]:this.expr(e.value,r);return this.assign(e.name,i,r),null}case"module":case"function":return null;case"use":{if(!e.include)return null;let s=this.load(e.path,e.pos);return this.block(s.body,r)}case"block":return this.block(e.body,new ce(r));case"if":return be(this.expr(e.cond,r))?this.block(e.then,new ce(r)):this.block(e.else,new ce(r));case"let":{let s=new ce(r);return this.bindSeq(e.assigns,s),this.block(e.body,s)}case"for":{let s=[];return this.loop(e.assigns,r,i=>s.push(this.block(e.body,i))),Ut(s)}case"call":if(e.modifier==="*")return null;{let s=this.callModule(e,r);return e.modifier==="#"||e.modifier==="%"?cr(s,"guide"):s}}}bindSeq(e,r){for(let n of e)this.assign(n.name,this.expr(n.value,r),r)}iterable(e,r){if(Re(e))try{return Kt(e,1e6)}catch(n){throw new z(n.message,r)}return Array.isArray(e)?e:typeof e=="string"?[...e]:e===void 0?[]:[e]}loop(e,r,n,s=0,i=new ce(r)){if(s===e.length)return n(i);let o=e[s];for(let a of this.iterable(this.expr(o.value,i),o.pos)){this.tick(o.pos);let u=new ce(i);u.vars.set(o.name,a),this.loop(e,r,n,s+1,u)}}evalArgs(e,r,n){let s=[],i=new Map;for(let o of e){let a=this.expr(o.value,r);o.name===null?s.push(a):i.set(o.name,a)}return{pos:s,named:i,at:n}}bindParams(e,r,n,s,i){let o=new Set(e.map(a=>a.name));e.forEach((a,u)=>{let l;r.named.has(a.name)?l=r.named.get(a.name):u<r.pos.length?l=r.pos[u]:l=a.default?this.expr(a.default,n):void 0,n.vars.set(a.name,l)});for(let a of r.named.keys())a.startsWith("$")?n.vars.set(a,r.named.get(a)):o.has(a)||this.warnings.push(`${i}: unknown argument "${a}" (line ${r.at.line})`)}callModule(e,r){let n=this.evalArgs(e.args,r,e.pos),s=r.mod(e.name);if(s){if(++this.depth>1e3)throw new z(`Recursion too deep in module ${e.name}()`,e.pos);try{let f=new ce(s.env,r);return this.bindParams(s.params,n,f,s.env,`${e.name}()`),f.children={stmts:e.children,env:r},f.vars.set("$children",this.childStmts(e.children).length),this.block(s.body,f)}finally{this.depth--}}let i=this.builtins[e.name];if(!i){let f=e.name==="color"?" Use layer(), cut(), score() or engrave() instead.":e.name==="square"?" Use rect().":"";throw new z(`Unknown module ${e.name}().${f}`,e.pos)}let o=new ce(r,r);for(let[f,c]of n.named)f.startsWith("$")&&o.vars.set(f,c);let a=this.childStmts(e.children),u=()=>new ce(r,o),l={args:n,env:o,children:()=>e.children.length?this.block(e.children,u()):ft(),childList:()=>{let f=u();this.hoist(e.children,f);let c=[];for(let h of e.children){let p=this.stmt(h,f);a.includes(h)&&c.push(p??ft())}return c}};try{return i(l)}catch(f){throw f instanceof z?f:new z(`${e.name}(): ${f.message}`,e.pos)}}childStmts(e){return e.filter(r=>r.kind!=="assign"&&r.kind!=="module"&&r.kind!=="function"&&r.kind!=="use")}callFunction(e,r,n,s){if(++this.depth>2e3)throw new z(`Recursion too deep in ${s}()`,r.at);try{this.tick(r.at);let i=Ze(e)?e.scope:e.env,o=new ce(i,n);return this.bindParams(e.params,r,o,i,`${s}()`),this.expr(e.body,o)}finally{this.depth--}}expr(e,r){switch(e.kind){case"num":case"str":case"bool":return e.value;case"undef":return;case"var":{let n=r.get(e.name);if(n.found)return n.value;let s=r.fn(e.name);if(s)return{type:"function",params:s.params,body:s.body,scope:s.env,name:e.name};if(e.name.startsWith("$"))return;throw new z(`Unknown variable "${e.name}"`,e.pos)}case"list":{let n=[];for(let s of e.items)this.listItem(s,r,n);return n}case"range":{let n=this.expr(e.start,r),s=this.expr(e.end,r),i=e.step?this.expr(e.step,r):1;if(typeof n!="number"||typeof s!="number"||typeof i!="number")throw new z("Range values must be numbers",e.pos);return{type:"range",start:n,step:i,end:s}}case"unary":{let n=this.expr(e.arg,r);return e.op==="!"?!be(n):e.op==="+"?n:this.arith("*",-1,n,e.pos)}case"binary":{if(e.op==="&&")return be(this.expr(e.left,r))&&be(this.expr(e.right,r));if(e.op==="||")return be(this.expr(e.left,r))||be(this.expr(e.right,r));let n=this.expr(e.left,r),s=this.expr(e.right,r);if(e.op==="==")return ot(n,s);if(e.op==="!=")return!ot(n,s);if(e.op==="<"||e.op==="<="||e.op===">"||e.op===">="){if(!(typeof n=="number"&&typeof s=="number"||typeof n=="string"&&typeof s=="string"))throw new z(`Can't compare ${we(n)} ${e.op} ${we(s)}`,e.pos);return e.op==="<"?n<s:e.op==="<="?n<=s:e.op===">"?n>s:n>=s}return this.arith(e.op,n,s,e.pos)}case"ternary":return be(this.expr(e.cond,r))?this.expr(e.then,r):this.expr(e.else,r);case"index":{let n=this.expr(e.target,r),s=this.expr(e.index,r);if(typeof s!="number")throw new z(`List index must be a number, got ${we(s)}`,e.pos);return Array.isArray(n)?n[Math.floor(s)]:typeof n=="string"?[...n][Math.floor(s)]:Re(n)?[n.start,n.step,n.end][Math.floor(s)]:void 0}case"member":{let n=this.expr(e.target,r),s={x:0,y:1,z:2}[e.name];return Array.isArray(n)&&s!==void 0?n[s]:Re(n)&&(e.name==="begin"||e.name==="step"||e.name==="end")?e.name==="begin"?n.start:e.name==="step"?n.step:n.end:void 0}case"call":return this.call(e,r);case"lambda":return{type:"function",params:e.params,body:e.body,scope:r};case"let":{let n=new ce(r);return this.bindSeq(e.assigns,n),this.expr(e.body,n)}}}listItem(e,r,n){switch(e.kind){case"item":n.push(this.expr(e.expr,r));return;case"each":{let s=this.expr(e.expr,r);n.push(...this.iterable(s,{line:0,col:0,offset:0}));return}case"for":this.loop(e.assigns,r,s=>this.listItem(e.body,s,n));return;case"if":be(this.expr(e.cond,r))?this.listItem(e.then,r,n):e.else&&this.listItem(e.else,r,n);return;case"let":{let s=new ce(r);this.bindSeq(e.assigns,s),this.listItem(e.body,s,n)}}}call(e,r){if(e.callee.kind==="var"){let s=e.callee.name,i=r.get(s);if(!i.found){let o=r.fn(s);if(o)return this.callFunction(o,this.evalArgs(e.args,r,e.pos),r,s);let a=this.specialFunction(s,e,r);if(a.handled)return a.value;let u=Nn[s];if(u){let l=this.evalArgs(e.args,r,e.pos);try{return u(l.pos,l.named)}catch(f){throw new z(f.message,e.pos)}}throw new z(`Unknown function ${s}()`,e.pos)}if(!Ze(i.value))throw new z(`"${s}" is a ${we(i.value)}, not a function`,e.pos);return this.callFunction(i.value,this.evalArgs(e.args,r,e.pos),r,s)}let n=this.expr(e.callee,r);if(!Ze(n))throw new z(`Can't call a ${we(n)}`,e.pos);return this.callFunction(n,this.evalArgs(e.args,r,e.pos),r,"function")}specialFunction(e,r,n){if(e==="echo"){let s=this.evalArgs(r.args,n,r.pos);return this.echoes.push(this.echoText(s)),{handled:!0,value:void 0}}if(e==="assert"){let s=this.evalArgs(r.args,n,r.pos);if(!be(s.pos[0]))throw new z(`Assertion failed${s.pos[1]!==void 0?": "+(typeof s.pos[1]=="string"?s.pos[1]:Pe(s.pos[1])):""}`,r.pos);return{handled:!0,value:!0}}if(e==="text_width"||e==="text_metrics"){let s=this.evalArgs(r.args,n,r.pos),i=this.measure(s,n);return e==="text_width"?{handled:!0,value:i.advance}:{handled:!0,value:[i.advance,i.bounds,i.ascent,i.descent]}}if(e==="finger_count"){let s=this.evalArgs(r.args,n,r.pos),i=this.num(this.arg(s,"length",0),"finger_count","length");return{handled:!0,value:gr(i,this.fingerWidth(s,n,1))}}return{handled:!1}}echoText(e){let r=e.pos.map(n=>typeof n=="string"?n:Pe(n));for(let[n,s]of e.named)r.push(`${n} = ${Pe(s)}`);return r.join(", ")}arith(e,r,n,s){if(typeof r=="number"&&typeof n=="number")switch(e){case"+":return r+n;case"-":return r-n;case"*":return r*n;case"/":return r/n;case"%":return r%n;case"^":return Math.pow(r,n)}if(e==="+"&&typeof r=="string"&&typeof n=="string")return r+n;if(Array.isArray(r)&&Array.isArray(n)){if(e==="+"||e==="-"){if(r.length!==n.length)throw new z(`Can't ${e==="+"?"add":"subtract"} lists of length ${r.length} and ${n.length}`,s);return r.map((o,a)=>this.arith(e,o,n[a],s))}if(e==="*"){if(Array.isArray(r[0]))return r.map(o=>this.arith("*",o,n,s));if(Array.isArray(n[0])){let o=n[0].length;return Array.from({length:o},(a,u)=>r.reduce((l,f,c)=>l+this.arith("*",f,n[c][u],s),0))}if(r.length!==n.length)throw new z(`Can't multiply lists of length ${r.length} and ${n.length}`,s);return r.reduce((o,a,u)=>o+this.arith("*",a,n[u],s),0)}}if(Array.isArray(r)&&typeof n=="number"&&(e==="*"||e==="/"))return r.map(o=>this.arith(e,o,n,s));if(typeof r=="number"&&Array.isArray(n)&&e==="*")return n.map(o=>this.arith(e,r,o,s));let i={"+":"add","-":"subtract","*":"multiply","/":"divide","%":"take remainder of","^":"raise"};throw new z(`Can't ${i[e]??e} ${we(r)} and ${we(n)}`,s)}arg(e,r,n,s){return e.named.has(r)?e.named.get(r):n>=0&&n<e.pos.length?e.pos[n]:s}num(e,r,n){if(typeof e!="number"||Number.isNaN(e))throw new Error(`${n} must be a number, got ${Pe(e)}`);return e}vec2(e,r,n=!0){if(typeof e=="number"&&n)return[e,e];if(Array.isArray(e)&&typeof e[0]=="number")return[e[0],typeof e[1]=="number"?e[1]:0];throw new Error(`${r} must be a number or [x, y], got ${Pe(e)}`)}points(e,r){if(!Array.isArray(e))throw new Error(`${r} must be a list of [x, y] points`);return e.map((n,s)=>{if(!Array.isArray(n)||typeof n[0]!="number"||typeof n[1]!="number")throw new Error(`${r}[${s}] must be an [x, y] point, got ${Pe(n)}`);return[n[0],n[1]]})}dyn(e,r){return e.get(r).value}segs(e){let r=Number(this.dyn(e,"$fn"))||0,n=Number(this.dyn(e,"$fa"))||2,s=Number(this.dyn(e,"$fs"))||.2;return i=>es(i,r,n,s)}thickness(e){let r=this.dyn(e,"$thickness");if(typeof r!="number"||r<=0)throw new Error("$thickness must be a positive number");return r}fingerWidth(e,r,n){let s=this.arg(e,"finger",n);return typeof s=="number"&&s>0?s:Math.max(3*this.thickness(r),6)}measure(e,r){if(!this.opts.fonts)throw new z("text needs a font. Pass fonts to render(), or --font on the command line.",e.at);let n=String(this.arg(e,"text",0,""));try{return Xi(this.opts.fonts,n,this.textOpts(e,r))}catch(s){throw s instanceof z?s:new z(s.message,e.at)}}textOpts(e,r){return{size:this.num(this.arg(e,"size",1,10),"text","size"),font:String(this.arg(e,"font",2,this.dyn(r,"$font")??"")),halign:String(this.arg(e,"halign",-1,"left")),valign:String(this.arg(e,"valign",-1,"baseline")),spacing:Number(this.arg(e,"spacing",-1,1))}}edges(e){let r=n=>{if(n==="out"||n==="in"||n==="flat")return n;throw new Error(`edges must be "out", "in" or "flat", got ${Pe(n)}`)};if(typeof e=="string")return[r(e),r(e),r(e),r(e)];if(Array.isArray(e)&&e.length===4)return e.map(r);throw new Error("edges must be one value or a list of 4: [bottom, right, top, left]")}makeBuiltins(){let e=(i,o)=>hr(i.children(),o),r=i=>o=>cr(o.children(),i);return{rect:i=>{let[o,a]=this.vec2(this.arg(i.args,"size",0,1),"size"),u=Number(this.arg(i.args,"r",-1,0))||0,l=be(this.arg(i.args,"center",1,!1)),f=ts(o,a,u,this.segs(i.env));return Le(fe([l?f.map(([c,h])=>[c-o/2,h-a/2]):f]))},square:i=>this.builtins.rect(i),circle:i=>{let o=this.arg(i.args,"d",-1),a=o!==void 0?this.num(o,"circle","d")/2:this.num(this.arg(i.args,"r",0,1),"circle","r");return Le([dr(a,a,this.segs(i.env)(a))])},ellipse:i=>{let[o,a]=this.vec2(this.arg(i.args,"r",0,1),"r");return Le([dr(o,a,this.segs(i.env)(Math.max(o,a)))])},regular_polygon:i=>{let o=Math.max(3,Math.floor(this.num(this.arg(i.args,"n",0,6),"regular_polygon","n"))),a=this.num(this.arg(i.args,"r",1,10),"regular_polygon","r");return Le([dr(a,a,o)])},star:i=>{let o=Math.max(2,Math.floor(this.num(this.arg(i.args,"n",0,5),"star","n"))),a=this.num(this.arg(i.args,"r",1,10),"star","r"),u=this.num(this.arg(i.args,"inner",2,a*.45),"star","inner"),l=[];for(let f=0;f<o*2;f++){let c=Math.PI/2+Math.PI*f/o,h=f%2?u:a;l.push([h*Math.cos(c),h*Math.sin(c)])}return Le(fe([l]))},polygon:i=>{let o=this.points(this.arg(i.args,"points",0),"points"),a=this.arg(i.args,"paths",1),u=Array.isArray(a)?a.map(l=>(Array.isArray(l)?l:[]).map(f=>o[Number(f)]).filter(Boolean)):[o];return Le(fe(u,"evenodd"))},path:i=>{let o=this.arg(i.args,"d",0);if(typeof o!="string")throw new Error('path() needs SVG path data, like path("M0 0 L10 0 L5 8 Z")');let a=mr(as(o),.01),u=String(this.arg(i.args,"fill",-1,"evenodd"))==="nonzero"?"nonzero":"evenodd";return Ut([Le(fe(a.closed,u)),yt(a.open)])},line:i=>{let o=this.vec2(this.arg(i.args,"from",0,[0,0]),"from",!1),a=this.vec2(this.arg(i.args,"to",1,[10,0]),"to",!1);return yt([[o,a]])},polyline:i=>{let o=this.points(this.arg(i.args,"points",0),"points"),a=be(this.arg(i.args,"closed",1,!1));return yt([a&&o.length?[...o,o[0]]:o])},arc:i=>{let o=this.num(this.arg(i.args,"r",0,10),"arc","r"),a=this.num(this.arg(i.args,"start",1,0),"arc","start"),u=this.num(this.arg(i.args,"end",2,90),"arc","end"),l=Math.max(2,Math.ceil(this.segs(i.env)(o)*Math.abs(u-a)/360)),f=[];for(let c=0;c<=l;c++){let h=(a+(u-a)*c/l)*Math.PI/180;f.push([o*Math.cos(h),o*Math.sin(h)])}return yt([f])},text:i=>{if(!this.opts.fonts)throw new Error("text() needs a font. Pass fonts to render(), or --font on the command line.");let o=this.arg(i.args,"text",0,"");return Le(Cn(this.opts.fonts,typeof o=="string"?o:Pe(o),this.textOpts(i.args,i.env)))},translate:i=>{let[o,a]=this.vec2(this.arg(i.args,"v",0,[0,0]),"v",!1);return e(i,[1,0,0,1,o,a])},rotate:i=>{let o=this.arg(i.args,"a",0,0),u=(Array.isArray(o)?Number(o[2]??0):this.num(o,"rotate","a"))*Math.PI/180,l=Math.cos(u),f=Math.sin(u),c=this.arg(i.args,"center",-1),h=[l,f,-f,l,0,0];if(c!==void 0){let[p,d]=this.vec2(c,"center",!1);h=[l,f,-f,l,p-l*p+f*d,d-f*p-l*d]}return e(i,h)},scale:i=>{let[o,a]=this.vec2(this.arg(i.args,"v",0,1),"v");return e(i,[o,0,0,a,0,0])},mirror:i=>{let[o,a]=this.vec2(this.arg(i.args,"v",0,[1,0]),"v",!1),u=Math.hypot(o,a)||1,l=o/u,f=a/u;return e(i,[1-2*l*l,-2*l*f,-2*l*f,1-2*f*f,0,0])},multmatrix:i=>{let o=this.arg(i.args,"m",0);if(!Array.isArray(o)||o.length<2)throw new Error("m must be a 2x3 or 3x3 matrix");let a=o[0],u=o[1];return e(i,[a[0],u[0],a[1],u[1],a[2]??0,u[2]??0])},union:i=>i.children(),group:i=>i.children(),difference:i=>{let[o,...a]=i.childList();if(!o)return ft();let u=n(a,"difference");return s(o,l=>({regions:ur(l.regions,u.regions),lines:Dt(l.lines,fe(u.regions),"outside")}))},intersection:i=>{let[o,...a]=i.childList();if(!o)return ft();let u=o;for(let l of a){let f=fe(n([l],"intersection").regions);u=s(u,c=>({regions:lr(c.regions,f),lines:Dt(c.lines,f,"inside")}))}return u},hull:i=>{let o=i.children(),a=[],u="cut",l=!0;for(let[c,h]of o.layers){l&&(h.regions.length||h.lines.length)&&(u=c,l=!1);for(let p of[...h.regions,...h.lines])a.push(...p)}let f=Qn(a);return{layers:new Map([[u,{regions:f.length>=3?[f]:[],lines:[]}]]),parts:o.parts}},offset:i=>{let o=this.arg(i.args,"r",0),a=this.arg(i.args,"delta",-1),u=be(this.arg(i.args,"chamfer",-1,!1)),l=o!==void 0?this.num(o,"offset","r"):this.num(a??0,"offset","delta"),f=o!==void 0?"round":u?"square":"miter";return s(i.children(),c=>({regions:fr(c.regions,l,f),lines:c.lines}))},stroke:i=>{let o=this.num(this.arg(i.args,"width",0,1),"stroke","width");return s(i.children(),a=>({regions:fe([...a.regions,...Kn(a.lines,o)]),lines:[]}))},outline:i=>s(i.children(),o=>({regions:[],lines:[...o.lines,...fe(o.regions).map(a=>[...a,a[0]])]})),cut:r("cut"),score:r("score"),engrave:r("engrave"),guide:r("guide"),layer:i=>{let o=this.arg(i.args,"name",0);if(typeof o!="string"||!o)throw new Error("layer() needs a name");let a=this.arg(i.args,"mode",1),u=this.arg(i.args,"color",2),l=this.layers.get(o);if(a!==void 0||u!==void 0||!l){let f=a??l?.mode??"line";if(!["cut","line","fill","guide"].includes(f))throw new Error('mode must be "cut", "line", "fill" or "guide"');let c=String(u??l?.color??"#00aa00");if(!/^#[0-9a-fA-F]{6}$/.test(c))throw new Error('color must look like "#00aa00"');this.layers.set(o,{name:o,mode:f,color:c})}return cr(i.children(),o)},part:i=>{let o=String(this.arg(i.args,"name",0,"part")),a=Math.max(1,Math.floor(Number(this.arg(i.args,"qty",1,1))||1)),u=i.children();return{layers:new Map,parts:[...u.parts,{name:o,qty:a,layers:u.layers,thickness:this.thickness(i.env),kerf:Number(this.dyn(i.env,"$kerf"))||0,material:String(this.dyn(i.env,"$material")??"material")}]}},material:i=>{let o=this.arg(i.args,"thickness",0),a=this.arg(i.args,"kerf",1),u=this.arg(i.args,"name",2);return o!==void 0&&i.env.vars.set("$thickness",this.num(o,"material","thickness")),a!==void 0&&i.env.vars.set("$kerf",this.num(a,"material","kerf")),u!==void 0&&i.env.vars.set("$material",String(u)),i.children()},children:i=>{let o=i.env.childCtx();if(!o)return ft();let a=this.childStmts(o.stmts),u=this.arg(i.args,"index",0),l=new ce(o.env,i.env);this.hoist(o.stmts,l);let f=new Set;if(u===void 0)a.forEach(h=>f.add(h));else for(let h of this.iterable(u,i.args.at))a[Number(h)]&&f.add(a[Number(h)]);let c=[];for(let h of o.stmts)if(h.kind==="assign")this.stmt(h,l);else if(f.has(h)){let p=this.stmt(h,l);p&&c.push(p)}return Ut(c)},echo:i=>(this.echoes.push(this.echoText(i.args)),i.children()),assert:i=>{let o=i.args;if(!be(o.pos[0]??o.named.get("condition")))throw new z(`Assertion failed${o.pos[1]!==void 0?": "+(typeof o.pos[1]=="string"?o.pos[1]:Pe(o.pos[1])):""}`,o.at);return i.children()},finger_rect:i=>{let[o,a]=this.vec2(this.arg(i.args,"size",0),"size"),u=this.edges(this.arg(i.args,"edges",1,"out")),l=this.thickness(i.env);return Le(rs(o,a,u,l,this.fingerWidth(i.args,i.env,2)))},finger_holes:i=>{let o=this.num(this.arg(i.args,"length",0),"finger_holes","length"),a=this.edges(this.arg(i.args,"edge",1,"out"))[0];if(a==="flat")throw new Error('edge must be "out" or "in"');return Le(ns(o,a,this.thickness(i.env),this.fingerWidth(i.args,i.env,2)))},tslot:i=>{let o=this.num(this.arg(i.args,"d",0,3),"tslot","d"),a=this.num(this.arg(i.args,"length",1,12),"tslot","length"),[u,l]=this.vec2(this.arg(i.args,"nut",2,[o*1.85,o*.8]),"nut",!1),f=this.num(this.arg(i.args,"nut_at",3,a/2),"tslot","nut_at");return Le(fe(ss(o,a,u,l,f)))},living_hinge:i=>{let[o,a]=this.vec2(this.arg(i.args,"size",0),"size"),u=this.num(this.arg(i.args,"spacing",1,1.5),"living_hinge","spacing"),l=this.num(this.arg(i.args,"bridge",2,3),"living_hinge","bridge"),f=this.num(this.arg(i.args,"cut",3,Math.max(l*2,(a-3*l)/2)),"living_hinge","cut");if(u<=0||l<=0||f<=0)throw new Error("spacing, bridge and cut must be positive");return yt(is(o,a,u,l,f))}};function n(i,o){let a={regions:[],lines:[]};for(let u of i){if(u.parts.length)throw new Error(`part() can only be the first child of ${o}()`);for(let l of u.layers.values())a.regions.push(...l.regions)}return a}function s(i,o){let a=new Map;for(let[u,l]of i.layers)a.set(u,o(l));return{layers:a,parts:i.parts}}}};var $e=t=>{let e=Math.round(t*1e3)/1e3;return Object.is(e,-0)?"0":String(e)},On=t=>t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/"/g,"&quot;"),It=(t,e)=>`M${t.map(([r,n])=>`${$e(r)} ${$e(n)}`).join("L")}${e?"Z":""}`;function Fn(t,e){let r=[];for(let n of e){let s=[],i=[],o=[];for(let a of t){let u=a.layers.get(n.name);if(u){for(let l of u.lines)s.push(It(l,!1));for(let l of u.regions)(je(l)<0?i:o).push(It(l,!0))}}(s.length||i.length||o.length)&&r.push({name:n.name,mode:n.mode,color:n.color,d:[...s,...i,...o].join(""),regions:[...i,...o].join(""),lines:s.join("")})}return r}function An(t,e,r,n){let s=['<?xml version="1.0" encoding="UTF-8"?>',`<svg xmlns="http://www.w3.org/2000/svg" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" width="${$e(e)}mm" height="${$e(r)}mm" viewBox="0 0 ${$e(e)} ${$e(r)}">`];for(let i of n){let o=[],a=[];for(let l of t){let f=l.layers.get(i.name);if(!f)continue;let c=` data-part="${On(l.part)}"`;if(i.mode==="fill"){f.regions.length&&a.push(`<path${c} d="${f.regions.map(h=>It(h,!0)).join("")}"/>`);for(let h of f.lines)a.push(`<path${c} fill="none" stroke="${i.color}" stroke-width="0.1" d="${It(h,!1)}"/>`);continue}for(let h of f.lines)o.push(`<path${c} d="${It(h,!1)}"/>`);for(let h of f.regions)(je(h)<0?o:a).push(`<path${c} d="${It(h,!0)}"/>`)}if(!o.length&&!a.length)continue;let u=i.mode==="fill"?`fill="${i.color}" fill-rule="evenodd" stroke="none"`:`fill="none" stroke="${i.color}" stroke-width="0.1"${i.mode==="guide"?' stroke-dasharray="1 1"':""}`;s.push(`<g id="${On(i.name)}" inkscape:groupmode="layer" inkscape:label="${On(i.name)}" data-mode="${i.mode}" ${u}>`,...o,...a,"</g>")}return s.push("</svg>",""),s.join(`
37
+ `)}var nh={"#ff0000":1,"#ffff00":2,"#00ff00":3,"#00ffff":4,"#0000ff":5,"#ff00ff":6,"#000000":7},sh=t=>{let e=nh[t.toLowerCase()];if(e)return e;let[r,n,s]=[1,3,5].map(i=>parseInt(t.slice(i,i+2),16));return r>n&&r>s?1:n>r&&n>s?3:s>r&&s>n?5:7};function qi(t,e,r,n){let s=[],i=(u,l)=>s.push(String(u),String(l)),o=u=>u.toUpperCase().replace(/[^A-Z0-9_-]/g,"_");i(0,"SECTION"),i(2,"HEADER"),i(9,"$ACADVER"),i(1,"AC1009"),i(9,"$INSUNITS"),i(70,4),i(0,"ENDSEC"),i(0,"SECTION"),i(2,"TABLES"),i(0,"TABLE"),i(2,"LAYER"),i(70,n.length);for(let u of n)i(0,"LAYER"),i(2,o(u.name)),i(70,0),i(62,sh(u.color)),i(6,"CONTINUOUS");i(0,"ENDTAB"),i(0,"ENDSEC"),i(0,"SECTION"),i(2,"ENTITIES");let a=(u,l,f)=>{i(0,"POLYLINE"),i(8,u),i(66,1),i(10,0),i(20,0),i(30,0),i(70,f?1:0);for(let[c,h]of l)i(0,"VERTEX"),i(8,u),i(10,$e(c)),i(20,$e(r-h)),i(30,0);i(0,"SEQEND"),i(8,u)};for(let u of n){let l=o(u.name),f=[];for(let c of t){let h=c.layers.get(u.name);if(h){for(let p of h.lines)a(l,p,!1);for(let p of h.regions)je(p)<0?a(l,p,!0):f.push(p)}}for(let c of f)a(l,c,!0)}return i(0,"ENDSEC"),i(0,"EOF"),s.join(`
38
+ `)+`
39
+ `}var Wi=(t,e)=>{let r=0;for(let n=1;n<t.length;n++)r+=Math.hypot(t[n][0]-t[n-1][0],t[n][1]-t[n-1][1]);return e&&t.length>2&&(r+=Math.hypot(t[0][0]-t[t.length-1][0],t[0][1]-t[t.length-1][1])),r},it=t=>Math.round(t*100)/100;function $i(t,e={}){let{program:r}=Ke(t),n=e.fonts?new Ar(e.fonts,e.defaultFont):void 0,s=new Dr({overrides:e.params,resolve:e.resolve,fonts:n,maxSteps:e.maxSteps}),i;try{i=s.run(r)}catch(k){let F=k instanceof RangeError&&/call stack/i.test(k.message)?new z("Recursion too deep: the program calls itself without stopping"):k;throw F instanceof z&&(F.echoes=s.echoes,n?.missing.size&&(F.missingFonts=[...n.missing])),F}let o=k=>i.globals.get(k).value,a=i.warnings,u=i.layers,l=k=>u.get(k)?.mode??"line",f=[...i.shape.parts];[...i.shape.layers.values()].some(k=>k.regions.length||k.lines.length)&&f.unshift({name:"part",qty:1,layers:i.shape.layers,thickness:Number(o("$thickness"))||3,kerf:Number(o("$kerf"))||0,material:String(o("$material")??"material")}),f.length||a.push("Nothing to cut: the program made no shapes.");let h=[],p=[];for(let k of f){let F=fe([...k.layers].filter(([re])=>l(re)==="cut").flatMap(([,re])=>re.regions)),A=new Map;for(let[re,de]of k.layers){if(l(re)==="guide"&&!e.guides)continue;let ae=fe(de.regions),ge=de.lines.filter(_=>_.length>=2);(l(re)==="line"||l(re)==="guide")&&(ge=[...ge,...ae.map(_=>[..._,_[0]])],ae=[]),F.length&&l(re)!=="guide"&&(l(re)!=="cut"&&(ae=lr(ae,F)),ge=Dt(ge,F,"inside")),(ae.length||ge.length)&&A.set(re,{regions:ae,lines:ge})}let R=Jn(F).length;R>1&&a.push(`Part "${k.name}" cuts into ${R} separate pieces. Join them, or make them separate parts.`);let N=0;for(let[re,de]of A)if(l(re)==="cut"){for(let ae of de.regions)N+=Wi(ae,!0);for(let ae of de.lines)N+=Wi(ae,!1)}let G=jr(A)??[0,0,0,0],B=e.kerf??k.kerf,$={name:k.name,qty:k.qty,width:it(G[2]-G[0]),height:it(G[3]-G[1]),pieces:R,cutLength:Math.round(N),thickness:k.thickness,kerf:B,material:k.material};if(B>0){for(let[re,de]of A)if(l(re)==="cut"){let ae=de.regions.filter(_=>je(_)<0).length;de.regions=fr(de.regions,B/2,"round",Math.min(.01,B/20));let ge=ae-de.regions.filter(_=>je(_)<0).length;ge>0&&a.push(`Part "${k.name}": ${ge} hole${ge===1?" is":"s are"} narrower than the ${B} mm kerf and will not be cut.`)}}h.push($),p.push({info:$,layers:A})}let d=e.sheet??o("$sheet");if(!Array.isArray(d)||typeof d[0]!="number"||typeof d[1]!="number")throw new z("$sheet must be [width, height]");let x=e.gap??Number(o("$gap")??3),m=e.margin??x,b=e.layout??(o("$layout")==="none"?"none":"pack"),S=["engrave",...[...u.keys()].filter(k=>!["engrave","score","cut","guide"].includes(k)),"score","cut","guide"].map(k=>u.get(k)).filter(Boolean),M=[],I=[1,0,0,-1,0,0],X=k=>jr(k)??[0,0,0,0],O=(k,F)=>hr({layers:k,parts:[]},F).layers;if(b==="none"){let k=[];for(let N of p)for(let G=0;G<N.info.qty;G++)k.push({part:N.info.name,copy:G+1,layers:O(N.layers,I),rotated:!1});let F=new Map;for(let N of k)for(let[G,B]of N.layers){let $=F.get(G)??{regions:[],lines:[]};$.regions.push(...B.regions),$.lines.push(...B.lines),F.set(G,$)}let A=X(F),R=[1,0,0,1,m-A[0],m-A[1]];for(let N of k)N.layers=O(N.layers,R);M.push(P(k,A[2]-A[0]+2*m,A[3]-A[1]+2*m,p[0]?.info))}else{let k=new Map;for(let F of p){let A=`${F.info.material}|${F.info.thickness}`;k.set(A,[...k.get(A)??[],F])}for(let F of k.values()){let[A,R]=d,N=[];for(let _ of F){let me=O(_.layers,I),Ce=X(me),gt=Ce[2]-Ce[0],vt=Ce[3]-Ce[1],Dn=!1;(gt>A-2*m||vt>R-2*m)&&vt<=A-2*m&&gt<=R-2*m&&(me=O(me,[0,1,-1,0,0,0]),Ce=X(me),gt=Ce[2]-Ce[0],vt=Ce[3]-Ce[1],Dn=!0),(gt>A-2*m||vt>R-2*m)&&a.push(`Part "${_.info.name}" (${it(gt)} x ${it(vt)} mm) is bigger than the ${A} x ${R} mm sheet.`),me=O(me,[1,0,0,1,-Ce[0],-Ce[1]]);for(let Ur=0;Ur<_.info.qty;Ur++)N.push({info:_.info,layers:me,w:gt,h:vt,copy:Ur+1,rotated:Dn})}N.sort((_,me)=>me.h-_.h||me.w-_.w);let G=[],B=m,$=m,re=0,de=0,ae=0,ge=()=>{G.length&&M.push(P(G,Math.max(de+m,1),Math.max(ae+m,1),F[0].info)),G=[],B=m,$=m,re=0,de=0,ae=0};for(let _ of N)B>m&&B+_.w>A-m&&(B=m,$+=re+x,re=0),G.length&&$+_.h>R-m&&ge(),G.push({part:_.info.name,copy:_.copy,layers:O(_.layers,[1,0,0,1,B,$]),rotated:_.rotated}),de=Math.max(de,B+_.w),ae=Math.max(ae,$+_.h),B+=_.w+x,re=Math.max(re,_.h);ge()}}function P(k,F,A,R){let N=it(F),G=it(A);return{width:N,height:G,material:R?.material??"material",thickness:R?.thickness??0,items:k,paths:Fn(k,S),svg:An(k,N,G,S),dxf:qi(k,N,G,S)}}let W=M.length===1?M[0]:void 0,j=W?[]:M.flatMap((k,F)=>{let A=M.slice(0,F).reduce((R,N)=>R+N.height+10,0);return k.items.map(R=>({...R,layers:O(R.layers,[1,0,0,1,0,A])}))}),se=it(Math.max(1,...M.map(k=>k.width))),le=it(Math.max(1,M.reduce((k,F)=>k+F.height,0)+10*Math.max(0,M.length-1))),pe=W?W.svg:An(j,se,le,S),Q=W?W.paths:Fn(j,S);return{sheets:M,width:W?.width??se,height:W?.height??le,paths:Q,svg:pe,parts:h,layers:S,warnings:a,echoes:i.echoes}}function Yi(t){switch(t.kind){case"num":case"str":case"bool":return{ok:!0,value:t.value};case"unary":return t.op==="-"&&t.arg.kind==="num"?{ok:!0,value:-t.arg.value}:{ok:!1};case"list":{let e=[];for(let r of t.items){if(r.kind!=="item")return{ok:!1};let n=Yi(r.expr);if(!n.ok||typeof n.value!="number")return{ok:!1};e.push(n.value)}return{ok:!0,value:e}}default:return{ok:!1}}}function Zi(t){let e=Number(t.trim());return t.trim()!==""&&Number.isFinite(e)?e:void 0}function _i(t){let{program:e,comments:r}=Ke(t),n=r.filter(a=>a.block&&/^\[[^\]]+\]$/.test(a.text)),s=new Map(r.filter(a=>!a.block&&!a.own).map(a=>[a.line,a.text])),i=new Map(r.filter(a=>!a.block&&a.own).map(a=>[a.line,a.text])),o=[];for(let a of e.body){if(a.kind!=="assign"||/^\$f[nas]$/.test(a.name))continue;let u=Yi(a.value);if(!u.ok)continue;let l=n.filter(x=>x.line<=a.pos.line).pop()?.text.slice(1,-1).trim()??"Parameters";if(l.toLowerCase()==="hidden")continue;let f=s.get(a.pos.line),c=i.get(a.pos.line-1)??"",h=u.value,p={name:a.name,caption:c,group:l,type:typeof h=="number"||Array.isArray(h)?"number":typeof h=="boolean"?"boolean":"string",initial:h,span:a.span},d=f?/^\[(.*)\]$/.exec(f.trim()):null;if(d){let x=d[1];if(x.includes(",")||/[a-zA-Z"]/.test(x)&&!/^-?[\d.]+(:-?[\d.]+){0,2}$/.test(x))p.options=x.split(",").map(m=>{let[b,C]=m.split(":").map(I=>I.trim().replace(/^"|"$/g,"")),S=Zi(b),M=p.type==="number"&&S!==void 0?S:b;return{name:C??b,value:M}});else{let m=x.split(":").map(Zi);m.every(b=>b!==void 0)&&(m.length===1?p.max=m[0]:m.length===2?(p.min=m[0],p.max=m[1]):(p.min=m[0],p.step=m[1],p.max=m[2]))}}o.push(p)}return{parameters:o}}var ih="0.2.0",oh="0.1";
40
+ /*! Bundled license information:
41
+
42
+ opentype.js/dist/opentype.module.js:
43
+ (*! https://mths.be/codepointat v0.2.0 by @mathias *)
44
+ */